下面用一個小例子來演示如何在Qt的界面中嵌入其他exe程序的界面,最終效果如下圖所示。本文參考了
http://blog.csdn.net/jiaoyaziyang/article/details/49802993,感謝原作者。
下面是具體的實現方法,用Windows自帶的計算器程序做例子。主要的思路就是獲取到計算器程序的窗口類名稱,然后在Qt中利用QWindow的靜態函數fromWinId,創建出QWindow對象,然后將這個對象放到一個QWidget中。
首先是獲取計算器程序的窗口類名稱,主要利用的是VS中的Spy++工具,在VS菜單“工具”中,打開之后如下圖所示
然后Ctr+F,進行搜索,出現如下界面
確定之后可以獲取到類名
完整的代碼如下所示,這段代碼是放在了一個QMainWindow的構造函數中,首先是調用了windows的API創建了計算器程序的進程,然后思路同前面所述。
ui->setupUi(this); //創建進程 //QString cmd="C:/Program Files/R/R-3.3.1/bin/x64/Rgui.exe"; QString cmd="C:/Windows/system32/calc.exe"; STARTUPINFO si={sizeof(si)}; PROCESS_INFORMATION pi; si.dwFlags=STARTF_USESHOWWINDOW; si.wShowWindow=true; bool bRet=CreateProcess( NULL, (LPWSTR)cmd.toStdWString().c_str(), NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL,&si,&pi); Sleep(50); WId wid = (WId)FindWindow(L"CalcFrame",NULL); //WId wid = (WId)FindWindow(L"Rgui Workspace",NULL); QWindow *m_window; m_window = QWindow::fromWinId(wid); //m_window->setFlags(m_window->flags() | Qt::CustomizeWindowHint | Qt::WindowTitleHint); // QWidget *m_widget; m_widget = QWidget::createWindowContainer(m_window,this->ui->widget); m_widget->setMinimumSize(400,300);