qt-嵌入其他exe文件

近期有一个这样的问题困扰着我,就有一个别人写的软件,我需要在qt里面嵌入这个软件,同时执行这个软件。

如何实现呢?

现在我写一个简单的被嵌入软件A.exe,假设A软件代码很简单,就是打印A软件带的参数。比如像下面这样的exe程序:

这里我只是以A.exe打个比方而已。然后如何将此软件嵌入qt的图形界面呢?

我们需要新建一个QT Widgets Application工程,取名为InsertAPP,然后在图形界面里添加一个按钮,取名为“执行APP”,增加一个QLineEdit用来填充A.exe的后面的参数,如下图:

然后在“执行APP按钮”添加槽函数,如下:

到这里,qt的UI就结束了。只需要在void MainWindow::on_pushButton_clicked()函数里填充一些代码就好了。

怎么将A.exe包含在我们的InsertAPP工程里呢?我们这里将A.exe作为一个资源文件添加进工程里,然后重新生成。添加路径为右击qt项目InsertAPP >> 添加新文件 >> Qt文件和类下的Qt Resource File >> 命名exe(也可以命其他的),然后发现工程下面出现了一个“资源”的文件夹,右击此文件夹选择“添加现有文件…”,将A.exe选中确认。过程如下:

 

这里就将A.exe作为资源文件添加到工程里了。需要注意的一点是A.exe必须在InserAPP工程文件夹下,尽量文件路径不含中文。

接下来只需要在mainwindows.cpp里添加一些头文件和实现void MainWindow::on_pushButton_clicked()函数就行。

例如我添加的头文件有:

#include "qmessagebox.h"
#include "QFile"

实现void MainWindow::on_pushButton_clicked()函数为:

    QString EXEName_src = ":/exe/A.exe";
    QString EXEName_Dst = "~A.exe";
    QFile EXEFile_src(EXEName_src);
    QFile EXEFile_Dst(EXEName_Dst);
   //对资源里的exe进行重新生成
    if(EXEFile_Dst.open (QIODevice::WriteOnly)){
       if(EXEFile_src.open(QIODevice::ReadOnly)){
       QByteArray tmp = EXEFile_src.readAll();
       EXEFile_Dst.write(tmp);
       }
    }
    EXEFile_Dst.close();

    QString EXEPara = ui->lineEdit->text(); //获取参数

    if (EXEPara.isEmpty()){
        QFile::remove(EXEName_Dst); //删掉exe文件
        QMessageBox::about(this,"Error","确保程序参数存在!!!");
        return;
    }

    QString CMD = EXEName_Dst + " " + EXEPara;
    //执行CMD命令
    char* ptr;
    QByteArray ba = CMD.toLocal8Bit(); //支持含中文
    ptr = ba.data();
    system(ptr);

   QFile::remove(EXEName_Dst); //删掉exe文件

我们需要查询A.exe作为资源文件在InsertAPP工程下的路径,查询直接在“资源”文件夹下右击A.exe选择copy path...,然后将路径替换到QString EXEName_src = ":/exe/A.exe";此句中即可。

然后运行此工程,如果步骤正确的话会出现以下界面:

如果编译出问题,自己调试以下,一般问题不大。附上此工程的链接(此工程下的A.exe无毒,360喜欢误报,如担心也可以替换成自己的exe进行测试)。QT版本为5.4.0,QT Creator版本为3.3.0。

  • 9
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值