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

Qt通过QProcess启动进程并传递命令行参数 QProcess用于完成启动外部程序,并与其交互通信。并且对命令行参数进行解析 阅读详情

往期回顾

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

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

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

 【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进程


 有用的知识又增加了~ 

Qt之启动进程   mainwindow.h如下: #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QProcess> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow ( QWidget *par 阅读详情

相关推荐

Qt外部调用进程类QProcess的使用

可以看到关闭后触发了对应finished()信号,然后通过打印可以看到状态从打开到关闭的变化情况是:1(Starting)->2(Running)->0(NotRunning)。并且触发finished()信号时由于进程已经关闭,所以获取不到对应的进程id,但是stateChanged(NotRunning)会先于finished(),并且这时进程没有完全关闭所有能获取到对应进程id。:是一个指向字符指针数组的指针,其中每个元素是一个指向表示一个命令行参数的C风格字符串的指针。

苍天愚弄我 3562

QT打开外部程序的3种办法

从来没想到过自己会写博客,以前都是带着问题百度查询别人的解决办法,总会不知名的点进别人的博客,看到别人的经验之谈。今天也想开一个博客,记录自己深度学习的学习之路。自己现在从事的行业是嵌入式,但是出于自己对于深度学习和人工智能的好奇心,促使自己在工作之余学习这些东西。在开始学习之前,我对于神经网络各模型及相关算法完全没有概念,希望自己可以认认真真的坚持下去。总感觉知识这种东西是互通的,多学点肯定没什

sunjincai8的博客 6654

Qt中使用QProcess在一个进程中启动另一个进程

void startFunc() { QProcess *process = new QProcess(this); //this表示process 的父窗口是本程序中的主窗口,当主窗口关闭时,进程也会终止, //如果不填加this,process 是独立的进程,主窗口关闭,进程依然运行 QString path = QCoreApplication::applicationDirPath(); path += "/myprocess.exe"; QStringList ar

modi000的博客 3281

Qt之启动外部程序

简述 QProcess可以用来启动外部程序,并与它们交互。 要启动一个进程,通过调用start()来进行,参数包含程序的名称和命令行参数,参数作为一个QStringList的单个字符串。 另外,也可以使用setProgram()和setArguments()来运行,然后调用start()或open()。 简述 接口 示...

weixin_34326179的博客 4150

使用Qt中的QProcess启动和关闭外部程序

通过调用QProcess的start()函数来启动外部程序,使用kill()函数或terminate()函数来停止外部程序的执行,以及使用write()函数和readAllStandardOutput()函数与外部程序进行数据交互。在上面的代码中,我们向外部程序写入了一条消息,然后使用readAllStandardOutput()函数读取外部程序的输出,并通过qDebug()输出到控制台。要启动外部程序,首先需要创建一个QProcess对象,并使用其start()函数来启动外部程序。

HackLogic的博客 1662

Qt启动外部进程、命令行、获取输出

Qt提供了启动外部进程的类QProcess,该类有启动,结束,等待等方法操作启动的外部进程。如果是用VS编程,也可以使用windows API启动外部进程,ShellExecuteEx,CreateProcess等,下面主要介绍QProcess的用法。 start启动,close关闭。界面如下: 一 启动外部程序 使用前添加头...

琅嬛福地 2760

C++ Qt 学习(十):Qt 其他技巧

C++ Qt 学习(十):Qt 其他技巧

qq_42994487的博客 780

Qt使用,Qprocess启动外部程序

前言 在本篇文章里面主要讲述利用Qt的Qprocess调用外部程序的注意事项,在此不讲述Qt的配置方法,同时因为网上已经有很多课参考的资料,在此主要强调一些需要注意的细节。 术语约定: 主程序:将要调用第三方程序的程序,调用代码在该程序里面; 外部程序:被主程序启动的程序,为.exe格式, 1 相关参考博客及资料 参考资料一 参考资料二 Qt官网资料 2 需要注意的事项 (1)启动外部程序 Q...

云水一笔 2万+

Qt启动带参数的外部进程

简介 The QProcess class is used to start external programs and to communicate with them。

m0_51409578的博客 599

JSON(详解)

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它以易于阅读和编写的文本格式来存储和表示数据,通常用于在不同的系统之间进行数据交换。JSON数据以键-值对的形式组织,可以包含对象、数组、字符串、数字等基本数据类型。它经常在Web开发、API通信等领域被广泛使用。

7704

Windows非分页缓冲池内存泄漏实战:PoolMon与RAMMap高效排查指南

本文详细介绍了Windows系统中非分页缓冲池内存泄漏的实战排查方法。当系统出现卡顿且内存占用异常增长时,通过RAMMap工具快速定位非分页缓冲池异常,并利用PoolMon监控内核内存分配标签,精准锁定泄漏源。文章提供了从确认症状、安装工具到使用findstr命令溯源驱动文件的完整五步排查流程,并总结了常见泄漏标签与解决方案,帮助用户高效解决深层系统内存问题。

weixin_28455801的博客 1011

Qt 之启动外部程序

QProcess可以用来启动外部程序,并与它们交互。

青春不老,奋斗不止! 4万+

计算机网络期末复习提纲(全知识点总结)

计算机网络期末复习提纲全知识点总结第一章 概述1.基本概念- 链路,结点,协议和服务,实体和对等实体,各层PDU- C/S模式,B/S模式,P2P模式- LAN,WAN,MAN,PAN的划分- 网络性能参数:速率,带宽,吞吐量,时延,往返时间,信道利用率2.互联网的组成(边缘部分与核心部分的作用)3.电路交换与分组交换,数据报交换和虚电路交换的特点4.TCP/IP体系结构,数据的封装与解封装第二章 物理层1.信号编码:不归零编码,曼切斯特编码2.影响信号失真程度的因素3.传输介质:双绞线,同轴电缆,光纤(单

mcyuuji的博客 8万+

QProcess 启动外部进程

QProcess是Qt框架中用于启动外部程序和**进程间通信(IPC)**的核心类,继承自QObject。它为开发者提供了跨平台的进程管理能力,支持Windows、Linux和macOS系统。

@ 1803

process插件_利用SPSS 插件MLmed检验多水平中介的调节模型

本文介绍一个SPSS插件,用于检验多水平中介的调节,及该方法与Mplus的比较。1 Mlmed 简介及安装Mlmed 简介: Mlmed 由Rockwood 2017年开发,基于SPSS插件计算Multilevel moderated mediation. 可以提供multilevel mediation Monte Carlo 置信区间比如(模拟20000次),以及多水平调节的...

weixin_39976081的博客 5772

SNAP实战:哨兵1 SLC数据预处理全流程详解(附避坑指南)

本文详细解析了使用SNAP软件处理哨兵1号SLC数据的完整预处理流程。从轨道精校正、辐射定标到多视与斑点滤波,再到地理编码,文章提供了清晰的操作步骤与核心逻辑,并重点分享了实践中的常见“坑”与解决方案,旨在帮助用户高效、准确地完成SAR数据预处理。

7up55的博客 1027

qt命令行程序启动外部进程_【Qt】Qt之启动外部程序【转】

简述QProcess可以用来启动外部程序,并与它们交互。要启动一个进程,通过调用start()来进行,参数包含程序的名称和命令行参数,参数作为一个QStringList的单个字符串。另外,也可以使用setProgram()和setArguments()来运行,然后调用start()或open()。接口start() 启动外部程序readAllStandardError() 从标准错误中获取所有数据...

weixin_39756445的博客 1255

pytorch gpu运行安装重点(CUDA12.3)

pytorch gpu加速

weixin_45597212的博客 3万+

外部进程嵌入到Qt进程界面

在程序中调起外部应用,然后将应用显示在软件的窗口中

twtongwei的博客 1754

湿式双离合器自动变速器simulink建模与仿真

随着汽车工业的不断发展,自动变速器在提高汽车性能、驾驶舒适性和燃油经济性等方面发挥着越来越重要的作用。湿式双离合器自动变速器(Wet Dual-Clutch Transmission,简称 WDCT)作为一种先进的自动变速器技术,具有换挡速度快、动力传递平稳、燃油经济性好等优点,被广泛应用于各类汽车中。结构组成湿式双离合器自动变速器主要由双离合器、齿轮传动系统、液压控制系统和电子控制系统等部分组成。双离合器:由两个独立的离合器组成,分别控制奇数挡和偶数挡。通过切换两个离合器的工作状态,可以实现快速换挡。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 348

Open3D 进阶(32)渐进三角网(PTD)地面滤波

渐进三角网地面滤波算法(Progressive TIN Densification, PTD)是一种广泛应用于机载LiDAR点云数据处理的滤波方法,旨在从复杂场景中精确分离地面点,以生成数字高程模型(DEM)。

点云侠的博客 1538

Linux下Qt应用嵌入外部进程窗口

Qt启动嵌入外部进程窗口 Linux x11环境下Qt应用实现多进程窗口嵌入 效果展示 如图: 实现说明 启动外部进程,通过进程id获取窗口winid,然后通过QWindow::fromWinId获取QWindow,使用QWidget::createWindowContainer创建包含进程界面QWidget。 embedexternalapp.cpp embedexternalapp::embedexternalapp(QWidget *parent) : QWidget(parent) {

sbkebcmj的博客 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Qt启动/杀死外部进程

参考1 启动外部线程 主要有: QProcess ::execute() 阻塞主进程的方式打开(静态成员); QProcess ::start() 以主进程的子进程的方式打开(父子); QProcess ::startDetached() 以隔离的方式打开; (1) QProcess ::execute() 方法 QProcess::execute("C:\\Environment\\influxDB_1_5_2\\influxd.exe") (2) QProcess ::start(

CXYYL的博客 6189

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

QT多进程编程

单个进程 使用QT中的QProcess类来启动一个外部·程序并与其进行通信。 要启动一个进程,可以使用start()函数,然后传递给该函数程序名称和运行这个程序所要使用的命令行参数。 执行完start函数,QProcess进入Starting状态,程序运行后QProcess进入Running状态并发射started()信号。进程退出后,QProcess重新进入NotRunning状态(初始状...

qq_40123329的博客 9354

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

09.QT应用程序启动外部exe文件

根据QT帮助文档,写了一个小测试案例,在QT应用中,启动 一个外部的exe程序,目前此exe使用的QT编译形成,后期改用C#形式的exe文件。 #include "QProcessDemo.h" #include &lt;QPushButton&gt; #include &lt;QProcess&gt; #include &lt;QMessageBox&gt; #i...

写给自己的笔记 3295

qt命令行程序启动外部进程_Qt之启动外部程序(使用参数很全面,还使用了setProcessChannelMode)...

简述QProcess可以用来启动外部程序,并与它们交互。要启动一个进程,通过调用start()来进行,参数包含程序的名称和命令行参数,参数作为一个QStringList的单个字符串。另外,也可以使用setProgram()和setArguments()来运行,然后调用start()或open()。接口start() 启动外部程序readAllStandardError() 从标准错误中获取所有数据...

weixin_28758189的博客 748
上一篇: Qt模型视图代理之MVD(模型-视图-代理)概念的简单介绍
下一篇: Qt模型视图代理之QTableView应用的简单介绍
从一的
博客等级 码龄5年 1995粉丝 213原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值