Qt如何嵌入其他程序的窗口?

    如何在Qt程序的界面中嵌入其他程序的界面? (windows系统下)

    1.首先获得外部程序的句柄,使用windows的API  FindWindow。

    FindWindow有两个参数,第一个是外部窗口的类名,第二个是外部窗口的标题。如果不知道以上两个参数,可以使用spy++工具查看:

    image.png

    打开spy++,点击望眼镜图标,弹出小窗口。 然后拖动上图2所示的图标到窗口上就会显示窗口的信息。


    2.使用QWindow的静态函数fromWinId将外部窗口转化为QWindow。fromWinId的参数是WId类型的,可以将HWND直接强转为WId。

    3.使用QWidget的静态函数createWindowContainer()将外部窗口嵌入到Qt的程序中。createWindowContainer有三个参数,第一个参数就是第二步获得的QWindow指针。第二个参数是窗口的父窗口,也就是 要将外部程序嵌入到哪个widget中。第三个参数是窗口标志。


    例:将QtCreator嵌入到应用程序中,首先通过spy++获得QtCreator窗口的类名为Qt5QWindowIcon。关键代码如下:

    image.png

例子将QtCreator窗口嵌入到bottom中,然后将bottom和btnTest按钮加入到布局中。程序运行后QtCreator消失不见,直到应用程序启动后,QtCreator的窗口嵌入到应用程序中(真是个奇怪的例子)。例子运行结果:

image.png


经过测试,被嵌入的程序显示和鼠标事件并不理想,有待进一步研究。




演示站
上一篇:Qt如何模拟鼠标点击?
下一篇:体验opencv进行人脸识别(基于python)

发表评论