1.首先获得外部程序的句柄,使用windows的API FindWindow。
FindWindow有两个参数,第一个是外部窗口的类名,第二个是外部窗口的标题。如果不知道以上两个参数,可以使用spy++工具查看:
打开spy++,点击望眼镜图标,弹出小窗口。 然后拖动上图2所示的图标到窗口上就会显示窗口的信息。

2.使用QWindow的静态函数fromWinId将外部窗口转化为QWindow。fromWinId的参数是WId类型的,可以将HWND直接强转为WId。
3.使用QWidget的静态函数createWindowContainer()将外部窗口嵌入到Qt的程序中。createWindowContainer有三个参数,第一个参数就是第二步获得的QWindow指针。第二个参数是窗口的父窗口,也就是 要将外部程序嵌入到哪个widget中。第三个参数是窗口标志。
例:将QtCreator嵌入到应用程序中,首先通过spy++获得QtCreator窗口的类名为Qt5QWindowIcon。关键代码如下:
例子将QtCreator窗口嵌入到bottom中,然后将bottom和btnTest按钮加入到布局中。程序运行后QtCreator消失不见,直到应用程序启动后,QtCreator的窗口嵌入到应用程序中(真是个奇怪的例子)。例子运行结果:
经过测试,被嵌入的程序显示和鼠标事件并不理想,有待进一步研究。