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

2023-12-22 00:44

本文主要是介绍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();

这篇关于12、Qt:用QProcess类启动外部程序:简单使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/522068

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

MySQL数据库宕机,启动不起来,教你一招搞定!

作者介绍:老苏,10余年DBA工作运维经验,擅长Oracle、MySQL、PG、Mongodb数据库运维(如安装迁移,性能优化、故障应急处理等)公众号:老苏畅谈运维欢迎关注本人公众号,更多精彩与您分享。 MySQL数据库宕机,数据页损坏问题,启动不起来,该如何排查和解决,本文将为你说明具体的排查过程。 查看MySQL error日志 查看 MySQL error日志,排查哪个表(表空间

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

hdu2289(简单二分)

虽说是简单二分,但是我还是wa死了  题意:已知圆台的体积,求高度 首先要知道圆台体积怎么求:设上下底的半径分别为r1,r2,高为h,V = PI*(r1*r1+r1*r2+r2*r2)*h/3 然后以h进行二分 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#includ

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听