QT带参数打开exe文件

目录

1.案例描述

2.APP1代码设计

3.APP2代码设计

4.运行验证


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个参数。如果在实际应用开发中,遇到需要使用一个软件打开另外一个软件,且要求打开软件可以控制被打开软件打开后的显示内容,可参考此案例。

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

99.999...%

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值