有時候需要做框架集成的東西,需要把其他客戶端像組件一樣集成到一個客戶端中,類似於一個軟件集成的平台客戶端,統一用一個中心管理的客戶端做類似於控制面板一樣的東西去調用不同的軟件。此時就必須相應不同的點擊圖標的事件去嵌入到主界面里面。下面簡單的對windows平台上面Qt的界面中嵌入系統自帶的計算機程序做簡單的說明。
一、首先是獲取計算機程序的窗口類名稱,只要利用的是VS中的Spy++工具,在vs菜單“工具”中打開之后如圖所示。查找計算器的窗口句柄並獲取到具體的類名。
CTRL+F,搜索句柄,獲取到對應的類名。
二、通過windows系統函數獲取軟件進程窗口的句柄。
- #include<Windows.h>
- WId wid = (WId)FindWindow(L"CalcFrame", L"計算器");
接口中的第一個參數是類名稱,也就是界面中“類”中有個標題,第二個參數是窗口名稱,打開“常規”,填寫標題,這個軟件窗口名稱為“計算器”,填入參數即可。
三、獲取QWindow。
QWindow*m_window;
m_window= QWindow::fromWinId(wid);
m_window->setFlags(m_window->flags()|Qt::CustomizeWindowHint|Qt::WindowTitleHint); //這邊可以設置一下屬性
四、獲取代理QWidget。
m_widget = QWidget::createWindowContainer(m_window, this->ui->widget); //第二個參數是作為window的父類,也可以用layout
具體的代碼如下所示,代碼放在了一個widget的構造函數中。
winId.h
winId.cpp
最后的運行效果如下圖。