目录
1.案例描述
本文描述一个QT写的软件(软件1)打开另外一个QT写的软件(软件2)的exe文件,并通过argv[]传送参数到被打开的软件exe,使被打开的软件界面显示打开软件传送的参数值。软件1使用startDetached()打开软件2后可自己关闭(如果使用start()打开,软件1关闭,软件2也会关闭),软件2独立运行。效果如下图。
案例执行文件包,可执行测试:https://download.csdn.net/download/weixin_44322043/89574037
2.APP1代码设计
APP1代码工程如下图
widgetapp1.ui设计如下图
APP1代码修改部分为【打开APP2】按钮点击事件函数
void WidgetApp1::on_pushButton_clicked()
{
//使用startDetached打开APP2.exe后,APP1.exe自己关闭
//参数1为APP2.exe路径
//参数2为arguments参数,第0个字符串必须是APP2.exe的名字,否则执行后APP2.exe的名字会被改掉。后面跟的为传送的参数
QProcess::startDetached(QApplication::applicationDirPath()+"/APP2.exe",
QStringList() << "APP2.exe" << ui->lineEdit1->text()
<< ui->lineEdit2->text()
<< ui->lineEdit3->text());
this->close();//打开APP2后关闭APP1
}
3.APP2代码设计
APP2代码工程如下图
widgetapp2.ui设计如下图
main.cpp代码修改如下
#include "widgetapp2.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
//将char*转到QStringList
for(int i=0;i<argc;i++)
{
slArgv.append(argv[i]);
}
WidgetAPP2 w;
w.show();
return a.exec();
}
widgetapp2.h定义全局QStringList变量,代码如下
#ifndef WIDGETAPP2_H
#define WIDGETAPP2_H
#include <QWidget>
extern QStringList slArgv;
QT_BEGIN_NAMESPACE
namespace Ui { class WidgetAPP2; }
QT_END_NAMESPACE
class WidgetAPP2 : public QWidget
{
Q_OBJECT
public:
WidgetAPP2(QWidget *parent = nullptr);
~WidgetAPP2();
private:
Ui::WidgetAPP2 *ui;
};
#endif // WIDGETAPP2_H
widgetapp2.cpp构造函数中添加argv的内容显示,代码如下
#include "widgetapp2.h"
#include "ui_widgetapp2.h"
QStringList slArgv={};
WidgetAPP2::WidgetAPP2(QWidget *parent)
: QWidget(parent)
, ui(new Ui::WidgetAPP2)
{
ui->setupUi(this);
for(int i=0;i<slArgv.size();i++)
{
//显示所有argv值
ui->labelArgv->setText(ui->labelArgv->text()+" , "+slArgv[i]);
//显示设置传过来的argv值
switch (i) {
case 2:
ui->label11->setText(slArgv[i]);
break;
case 3:
ui->label12->setText(slArgv[i]);
break;
case 4:
ui->label13->setText(slArgv[i]);
break;
default:
break;
}
}
}
WidgetAPP2::~WidgetAPP2()
{
delete ui;
}
4.运行验证
将构建后生成的APP2.exe文件复制到APP1.exe的构建文件夹中,如下图
运行APP1代码,如下图
点击【打开APP2】按钮,打开APP2.exe,如下图
从上图中可以看出APP2的main函数参数argv的值,前两个值固定是APP2.exe路径和exe文件名称,后面跟的是APP1界面设置的3个参数。如果在实际应用开发中,遇到需要使用一个软件打开另外一个软件,且要求打开软件可以控制被打开软件打开后的显示内容,可参考此案例。