由于项目需要,要实现将一个外部exe运行在qt的窗口中。下面记录一下过程:
首先就是在qt中创建一个新项目
由于我这里没有用到画布,所以没有勾选Generate form
然后就会自动生成一个可运行的代码
然后将我下边的代码替换粘贴进去
#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
#include <QWidget>
#include <QProcess>
#include <QWindow>
#include <Windows.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget *w = new QWidget;
QProcess m_process;
m_process.start("D:/homework/Blender/build_windows_x64_vc17_Release/bin/Debug/blender.exe",QStringList()<<""); // 【1】可执行exe的路径
if(!m_process.waitForFinished(3000))
{
qDebug()<<"--------";
}
WId wid = (WId)FindWindow(L"GHOST_WindowClass", NULL); // 【2】需要嵌入的exe的界面的类名称
QWindow *m_window = QWindow::fromWinId(wid);
m_window->setFlags(m_window->flags() | Qt::CustomizeWindowHint | Qt::WindowTitleHint); //这边可以设置一下属性
QWidget *m_widget = QWidget::createWindowContainer(m_window, w);
m_widget->setMinimumSize(500, 500);//窗口大小
w->show();
return a.exec();
}
注意我标注的【1】和【2】,需要替换成自己可执行的exe的路径和类名称。
关于界面的类名称,如果是自己写的可执行exe,那就写自己定义的类名称。如果用的是第三方exe,则用vs的spy++可以检测到类名称。
如果有下载Visual Studio,则在下边的路径中可以找到该检测软件。如果没有找到,百度也可以直接找到spy++的下载。
双击打开,点击【查找窗口】
然后打开自己要嵌入的exe,拖动【查找程序工具】到自己exe窗口。
然后就可以看到类名,复制到自己的qt代码中
然后保存运行,就可以看到效果啦!
大功告成!
注意在qt运行前,一定要打开自己要嵌入的exe文件,然后才可以在qt的程序窗口中看到自己嵌入的exe。否则的话qt运行出的程序窗口将是空白的,里边没有界面内容显示。。