【Qt问题】Qt 如何带参数启动外部进程

往期回顾

【Qt问题】Qt中文乱码问题解决方案(详细汇总)CSDN博客

【Qt问题】Qt常用快捷键汇总-CSDN博客

【Qt问题】Qt Creator 如何链接第三方库-CSDN博客

 【Qt问题】Qt 如何带参数启动外部进程

什么意思呢?因为我们在实际开发的时候,可能需要用到别人做的一个进程,此时就可以通过设置在我们自己的程序里直接去调用别人的进程,这样操作简单方便又省时省力。

一、QProcess类

主要会用到一个类QProcess,所以先对其进行简单介绍

1、什么是QProcess类

QProcess类是Qt中用于启动外部程序并与其进行交互的类。它允许你在Qt应用程序中启动外部程序,并可以读取其输出、写入其输入,以及监控其状态。

2、启动步骤

启动外部程序:可以通过QProcess启动任何可执行文件,无论是系统自带的命令行工具还是自定义的应用程序。
读取程序输出:可以通过QProcess读取外部程序的标准输出和标准错误输出,从而获取程序执行的结果或错误信息。
写入程序输入:可以通过QProcess向外部程序发送输入,例如模拟用户输入或传递参数。
监控程序状态:可以通过信号和槽机制监控外部程序的状态变化,例如程序启动、结束、出错等。

 二、带参数启动外部进程示例

1、示例介绍

比如,此时我有两个进程:

1、QProcess进程
2、AAA进程

 可以看到,我此时的两个进程直接就是对应着两个项目了,不是单独的一个,而我要做的是,在其中一个项目里直接启动另一个项目。

其中QProcess运行结果:

而AAA运行结果 :

2、具体实现

 2.1、通过QProcess进程调用AAA进程

获取AAA.exe所在文件夹路径,同时添加两个参数:“yes”/“start”

void Widget::on_pushButton_clicked()
{
    //"D:/MyQtCreatorProject/build-AAA-Desktop_Qt_5_15_2_MSVC2019_32bit-Debug/debug/AAA.exe"
    QString exe_path = "D:/MyQtCreatorProject/build-AAA-Desktop_Qt_5_15_2_MSVC2019_32bit-Debug/debug/AAA.exe";

    QStringList argList;
    argList.append("yse");
    argList.append("start");

    QProcess p;
    p.execute(exe_path, argList);
}

这里我们用到execute()这个方法,对其进行一个简单介绍:

2.2、execute()

2.2.1、什么是execute()

QProcess::execute()是Qt中QProcess类的一个静态函数,用于执行指定的程序(program)并传递参数(arguments)。它会启动一个外部程序并等待其完成,然后返回外部程序的退出代码。

2.2.2、函数原型
int QProcess::execute(const QString &program, const QStringList &arguments)

参数说明:

program:要执行的外部程序的路径或名称。

arguments:传递给外部程序的参数列表。 

 返回值:

如果外部程序成功启动并正常退出,则返回外部程序的退出代码(通常为0表示成功)。

如果外部程序无法启动或异常退出,则返回-1。

2.2.3、示例
#include <QProcess>

int main()
{
    QString program = "ls"; // 要执行的外部程序,例如在Linux上是列出当前目录内容的ls命令
    QStringList arguments; // 参数列表,这里为空

    int exitCode = QProcess::execute(program, arguments);
    if (exitCode == 0) {
        qDebug() << "External program executed successfully.";
    } else {
        qDebug() << "External program failed with exit code:" << exitCode;
    }

    return 0;
}
2.2.4、注意事项

QProcess::execute()是一个阻塞函数,即在外部程序执行完成前,当前程序会一直等待,因此在执行耗时较长的外部程序时可能会导致界面冻结

如果需要非阻塞地执行外部程序并处理其输出,可以使用QProcess类的其他函数,如start()和相关信号槽机制。 

2.3、在AAA进程里过滤参数

在AAA进程里,对参数进行过滤,需要参数正确才运行显示,否则不显示

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    // AAA.exe -yes -start
    if(argc != 3)
    {
        return -1;
    }
    else
    {
        QString str1 = QString(argv[1]);
        QString str2 = QString(argv[2]);

        if(!str1.compare("yes") && !str2.compare("start"))
        {
            Widget w;
            w.show();
            return a.exec();
        }
    }
    
    return -2;
}

 这里argc代表参数个数,argv[]存放参数值

为什么要有这样一个步骤,如果没有,那么随便哪个人都可以调我们的程序,这不是一件好事情,所以需要对其进行验证。

2.4、示例验证

最终,我们就实现了在QProcess里调用AAA进程


 有用的知识又增加了~ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值