1. 运行外部exe程序
https://www.cnblogs.com/gaoxudong0704/p/5986730.html
![[Original] Qt Tutorial(Funciton Edition) - 图1](/uploads/projects/yanjitai@cbymmn/4518760f1c51627269ad31880ed03992.png)
下面是具体的实现方法,用Windows自带的计算器程序做例子。主要的思路就是获取到计算器程序的窗口类名称,然后在Qt中利用QWindow的静态函数fromWinId,创建出QWindow对象,然后将这个对象放到一个QWidget中。
获取计算器程序的窗口类名称
首先是获取计算器程序的窗口类名称,主要利用的是VS中的Spy++工具,在VS菜单“工具”中,打开之后如下图所示![[Original] Qt Tutorial(Funciton Edition) - 图2](/uploads/projects/yanjitai@cbymmn/0608eb1d8f1709daac8a5f6402921608.png)
然后Ctr+F,进行搜索,出现如下界面![[Original] Qt Tutorial(Funciton Edition) - 图3](/uploads/projects/yanjitai@cbymmn/b1e4bd16bf9b03cf7e028a53866adc57.png)
确定之后可以获取到类名![[Original] Qt Tutorial(Funciton Edition) - 图4](/uploads/projects/yanjitai@cbymmn/db139155aa08e029fb495ee6b575a7aa.png)
完整的代码如下所示,这段代码是放在了一个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);
