qt嵌入并运行外部exe

由于项目需要,要实现将一个外部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(-1))
    {
        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运行出的程序窗口将是空白的,里边没有界面内容显示。。

  • 7
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值