12、Qt:用QProcess类启动外部程序:简单使用

一、说明

  • 简单使用:在一个函数中,使用QProcess类的临时对象调用可执行文件exe,只有这个exe执行完了,这个函数才往下执行,一次性打印出exe所有输出信息;
  • 复杂使用:创建QProcess类的全局对象,在一个函数中,调用可执行文件exe,不用等exe执行完,这个函数就可以往下执行,实时打印输出相关信息;

注:此文讲解简单使用方式,复杂使用方式见下一篇。

二、创建项目

新建一个Qt项目,选择“其他项目”、“子目录项目”,点击“Choose”

更改项目名称和位置

选择编译器

默认

三、创建被调用的可执行文件

点击上一步的“完成&添加子项目”,完成项目创建,并开始创建子项目,弹出界面,选择“Application”、“Qt Console Application”

更改子项目名称

默认

选择编译器

默认,点击完成

在test.pro中添加如下代码,更改可执行文件生成位置

CONFIG(debug , debug | release) {
win32:!wince{DESTDIR = $$PWD/../bin_debug
}
unix {DESTDIR = $$PWD/../bin_debug_linux
}
} else {
win32:!wince{DESTDIR = $$PWD/../bin_release
}
unix {DESTDIR = $$PWD/../bin_release_linux
}
}

更改main.cpp中的代码

#include <QCoreApplication>
#include <iostream>
#include <QThread>
using namespace std;/*
* argc:表示传入main函数的数组元素个数
* argv:表示传入main函数的指针数组
* 第一个数组元素argv[0]:程序名称
*/
/**
* @brief main 主函数
* @param argc 传入main函数的参数个数(argv的数量)
* @param argv 传入main函数的参数数组,第一个数组元素argv[0]:程序名称
* @return
*/
int main(int argc, char *argv[])
{//QCoreApplication a(argc, argv);for(int i = 0; i < argc; i++){cout << argv[i] << endl;QThread::msleep(1);}return 0;//return a.exec();
}

构建,生成可执行文件

四、调用可执行文件

右击项目名称,选择“新子项目”

选择“Application”、“Qt Widgets Application”

更改子项目名称

默认

点击完成

在SimpleUse.pro中添加如下代码,更改可执行文件生成位置

CONFIG(debug , debug | release) {
win32:!wince{DESTDIR = $$PWD/../bin_debug
}
unix {DESTDIR = $$PWD/../bin_debug_linux
}
} else {
win32:!wince{DESTDIR = $$PWD/../bin_release
}
unix {DESTDIR = $$PWD/../bin_release_linux
}
}

在mainwindow.ui界面上添加一个QPushButton,并转到槽

更改mainwindow.cpp中的代码

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QProcess>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{QProcess p;QString program = QApplication::applicationDirPath() + "/test.exe"; //要运行的外部程序QStringList argument;argument << "11" << "22" << "33";  //给外部程序传递的参数p.start(program, argument);if(!p.waitForStarted()) //等待程序启动{qDebug() << "程序启动失败" << program << p.readAllStandardOutput(); //程序输出信息p.close();return;}if(!p.waitForFinished(100000))//等待10000ms程序未结束,返回false{qDebug() << "程序结束失败:" << p.readAllStandardOutput(); //程序输出信息p.close();return;}qDebug() << "程序结束:" << p.readAllStandardOutput(); //程序输出信息p.close();
}

五、运行测试

运行SimpleUse程序,点击pushButton,打印框输出如下内容

六、使用命令提示符cmd调用可执行文件

    QProcess p;p.setProgram("cmd");QString program = QApplication::applicationDirPath() + "/test.exe";QStringList argument;argument<<"/c"<< program << "11" << "22" << "33";p.setArguments(argument);p.start();if(!p.waitForStarted()) //等待程序启动{qDebug() << "程序启动失败" << program << p.readAllStandardOutput(); //程序输出信息p.close();return;}if(!p.waitForFinished(100000))//等待10000ms程序未结束,返回false{qDebug() << "程序结束失败:" << p.readAllStandardOutput(); //程序输出信息p.close();return;}qDebug() << "程序结束:" << p.readAllStandardOutput(); //程序输出信息p.close();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/291683.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用HTTP协议有哪些风险?HTTP与HTTPS的区别是什么

作为两种常见的网络协议&#xff0c;HTTP和HTTPS都是用于在浏览器和服务器之间传输数据的。然而在保障数据安全性方面&#xff0c;HTTPS远远优于HTTP。在网络安全愈发重要的当下&#xff0c;HTTP协议的不安全性使得其逐渐被淘汰弃用。那么使用HTTP协议有哪些风险呢&#xff1f;…

Unity中Shader缩放矩阵

文章目录 前言一、直接相乘缩放1、在属性面板定义一个四维变量&#xff0c;用xyz分别控制在xyz轴上的缩放2、在常量缓存区申明该变量3、在顶点着色器对其进行相乘&#xff0c;来缩放变换4、我们来看看效果 二、使用矩阵乘法代替直接相乘缩放的原理1、我们按如下格式得到缩放矩阵…

大模型之二十一-小语言模型塞道开启

当前提到大语言模型&#xff0c;大家想到的都是动辄百亿规模以上参数量的模型&#xff0c;13B、70B都是稀疏平常入门级的&#xff0c;但是目前从模型层面来看&#xff0c;模型参数量的规模两极分化已经来临&#xff0c;早期各大公司为了效果怼上去&#xff0c;采取了简单粗暴的…

伽马校正:FPGA

参考资料&#xff1a; Tone Mapping 与 Gamma Correction - 知乎 (zhihu.com) Book_VIP: 《基于MATLAB与FPGA的图像处理教程》此书是业内第一本基于MATLAB与FPGA的图像处理教程&#xff0c;第一本真正结合理论及算法加速方案&#xff0c;在Matlab验证&#xff0c;以及在FPGA上…

人工智能可以战胜人类智慧大脑么?

引言 在当今快速发展的科技时代&#xff0c;人工智能的进步日新月异&#xff0c;引发了一场深刻的讨论&#xff1a;能否有一天&#xff0c;人工智能能够超越甚至战胜人类智慧&#xff1f;这个问题涉及到人类认知的广泛领域&#xff0c;牵涉到人类思维的深层次特质以及AI技术在…

产业园区运营管理方案的六大核心要素

产业园区是我国区域经济的重要载体&#xff0c;是一个集产业、技术、服务、管理等于一体的经济组织形态。随着我国经济的高速发展&#xff0c;各地园区快速扩张&#xff0c;彼此间竞争日益激烈&#xff0c;在这样的大环境下&#xff0c;如何做好园区的运营管理&#xff0c;保障…

[CVPR 2023:3D Gaussian Splatting:实时的神经场渲染]

文章目录 前言小结 原文地址&#xff1a;https://blog.csdn.net/qq_45752541/article/details/132854115 前言 mesh 和点是最常见的3D场景表示&#xff0c;因为它们是显式的&#xff0c;非常适合于快速的基于GPU/CUDA的栅格化。相比之下&#xff0c;最近的神经辐射场&#xf…

计算机网络实验速成

目录 网络实验速成 自动连接类型&#xff1a; 指示灯状态说明&#xff1a; 显示接口&#xff1a; 放置注释信息&#xff1a; 配置计算机&#xff1a; 同理&#xff0c;配置服务器&#xff1a; 配置路由器&#xff1a; router0 配置&#xff1a; router1 配置&…

技术分享-Jenkins

持续集成及Jenkins介绍 软件开发生命周期叫SDLC&#xff08;Software Development Life Cycle&#xff09;&#xff0c;集合了计划、开发、测试、部署过程。 在平常的开发过程中&#xff0c; 需要频繁地&#xff08;一天多次&#xff09;将代码集成到主干&#xff0c;这个叫持…

助力智能车辆检测计数,基于官方YOLOv8全系列[n/s/m/l/x]开发构建道路交通场景下不同参数量级车流检测计数系统

在很多道路交通卡口都有对车流量的统计计算需要&#xff0c;有时候一些特殊时段、特殊节日等时间下对于车流的监测预警更为重要&#xff0c;恶劣特殊天气下的提早监测、预警、限流对于保证乘客、驾驶员的安全是非常重要的措施&#xff0c;本文的主要目的就是想要开发构建道路交…

计算机基础之U盘重装系统

一. 如何选择操作系统 对于Windows操作系统来说&#xff0c;大家选择困难主要集中在Windows 7和Windows 10上&#xff1b;至于XP和Win8&#xff0c;一个是老古董一个是过渡产品都不用考虑&#xff1b;喜欢Win7可能更多的是使用习惯&#xff0c;当然优点也有很多&#xff0c;比…

【银行测试】银行金融测试+金融项目测试点汇总...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、银行金融测试是…