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

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

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

FindWindow有兩個參數,第一個是外部窗口的類名,第二個是外部窗口的標題。如果不知道以上兩個參數,可以使用spy++工具查看:

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

打開spy++,點擊望眼鏡圖標,彈出小窗口。 然後拖動上圖2所示的圖標到窗口上就會顯示窗口的信息。

2.使用QWindow的靜態函數fromWinId將外部窗口轉化為QWindow。fromWinId的參數是WId類型的,可以將HWND直接強轉為WId。

3.使用QWidget的靜態函數createWindowContainer()將外部窗口嵌入到Qt的程序中。createWindowContainer有三個參數,第一個參數就是第二步獲得的QWindow指針。第二個參數是窗口的父窗口,也就是 要將外部程序嵌入到哪個widget中。第三個參數是窗口標誌。

例:將QtCreator嵌入到應用程序中,首先通過spy++獲得QtCreator窗口的類名為Qt5QWindowIcon。關鍵代碼如下:

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

例子將QtCreator窗口嵌入到bottom中,然後將bottom和btnTest按鈕加入到佈局中。程序運行後QtCreator消失不見,直到應用程序啟動後,QtCreator的窗口嵌入到應用程序中(真是個奇怪的例子)。例子運行結果:

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

經過測試,被嵌入的程序顯示和鼠標事件並不理想,有待進一步研究。


分享到:


相關文章: