Qt调用外部程序,启动并从中获取信息——QProcess
瞎记:今天在开发的时候遇到了程序间调用的问题,最开始的设想是使用c++来完成,后来想,既然使用Qt进行界面开发的,那能否用Qt来完成相关工作呢,于是展开了这一次旅行。
闲话少说,开始正文,先看一下大致的流程:
- 首先,我们通过Qt的那部分模块来实现此功能,牛曰:在`QProcess`模块当中
- 其次,我们应该通过怎样一个流程来完成呢,牛历后曰:两步走,首先要启动外部程序,启动之后外部程序会产生相应的动作,也就是说会产生相应的信号;最后,将接受到的信号连接到相应的处理函数上,完成相应的动作。
- 最后,我们来看实现
先看个简单版的,启动一个程序
QProcess* caller = new QProcess(this);//创建对象,指定父类指针caller->start("notepaid.exe");//启动notepaid
这是会弹出相应的界面,我的设置存在一些问题,启动上诉代码的时候,启动的是系统自带的记事本
再看一个稍微复杂一些的,启动一个指定程序,并想此程序传入命令参数,这个操作类似于在命令行中启动程序时带有一些参数,这里我自己制作了一个小的打印程序,就是将你给定的内容打印出来(内容不许有空格)
QProcess* caller = new QProcess(this);//创建对象,指定父类指针
caller->start("D:/exetest.exe",QStringList()<<"HelloWorld");//启动程序并传入参数
由于制作的软件是无界面的,所以运行上述代码的时候,我是看不到任何东西的
最后看个再复杂一点的,在前一步的基础上,获取调用软件的输出(就是打印给定内容),并在当前软件中显示出来
void ExeTest::OnBtnTest(){QProcess* caller = new QProcess(this);//创建对象,指定父类指针caller->start("D:/exetest.exe",QStringList()<<"HelloWorld");//启动程序并传入参数connect(this->caller, SIGNAL(finished(int)),this,SLOT(Result(int)));//连接信号}
void ExeTest::Result(int a){if (0 == a){QByteArray res = caller->readAllStandardOutput(); //获取标准输出ui.Txt->appendPlainText(QString::fromLocal8Bit(res)); //打印出来}caller->close();}
运行上述代码的时候你就可以看到在Qt界面中显示出了“HelleWorld”
是不是想问什么是标准输出?曰:类似于print,cout这种的输出,需要注意的是,输出和返回时不一样的!
是不是想问程序如何接受外部命令?曰:记得main函数声明是带有的两个参数吗,就是int main(int argc, char *argv[]),argc是参数数量,argv存放了具体的命令语句,我这里说的还不是很清楚,可以再去查一下
注意:我这里只是简单的使用,QProcess类中还有很多方法我没有用到,在进一步使用前建议把Qt官方文档中有关QProcess的介绍看一下,重点是看一下他有哪些接口
非常感谢这篇博客:https://www.cnblogs.com/findumars/p/5176315.html
Qt调用外部程序,启动并从中获取信息——QProcess相关推荐
- Qt|Linux工作笔记-异步调用ping命令,重定向获取信息,界面显示
逻辑: 1.使用QProcess在开线程前设置输出文件[setStandardOutputFile]; 2.开一个线程,去专门调用shell命令,比如ping: 3.Qt读取重定向文件,进行界面显示: ...
- qt调用外部程序(exe)
1.添加头文件 #include "QProcess"QProcess::startDetached("C:\\Users\\Administrator\\Desktop ...
- QProcess调用外部程序
QT实战教程: QT初步之计时器 QT信号与槽 QT多线程实战 QT文件读写 文章目录 调用系统指令 系统指令返回值 源码地址: QT调用外部程序 调用系统指令 针对类似复制.移动等功能,显然操作系统 ...
- python通过调用百度天气API接口获取天气信息
python调用百度接口,获取天气信息 需要到百度注册开发者账号,通过账号获取到每个账号私有的应用访问(AK) 使用此脚本还需要district_id.csv文档,在我资源中可以免费下载,也可在百度天 ...
- 使用C#调用德卡 T10读卡器获取医保卡信息
文章目录 前言 一.引用部分 1.引入 2.C#方法 前言 C#调用德卡 T10读卡器获取医保卡信息 一.引用部分 1.引入 代码如下 需要一个dll(DC_Reader.dll),一个ini文件(D ...
- 微信小程序之登录跳转及调用接口获取信息
最近学习微信小程序,新学了网页跳转及获取个人信息 网页跳转需要 wx.switchTab方法 获取信息的话,首先调用接口,然后取出数据就可以了. 首先创建两个html文件,代码如下 <view ...
- QT 调用vs写的dll 使用OutputDebugString输出调试信息
vs c++写的dll中使用的cout 将调试信息写到控制台中,但qt调用dll时,cout内容没有办法显示了. 解决办法:使用OutputDebugStringA char buf[128];spr ...
- java命令截图,GitHub - xuege-cn/fmj: FMJ (FFMpeg for Java)。通过Java调用FFMpeg命令的方式来对音视频进行处理(获取信息、截图等等)。...
项目介绍 FMJ (FFMpeg for Java) 通过Java调用FFMpeg命令的方式来对音视频进行处理(获取信息.截图等等). FFMpeg安装 建议使用 ffmpeg-2.6.1 版本 Li ...
- java的外部引用_Java 调用外部程序
在Java中可以调用外部程序,这需要通过Process等类来实现. 创建进程 先来介绍一下Process的创建,我们需要使用ProcessBuilder类.如果需要命令行参数的话,则传入多个参数.比方 ...
- java魔法堂_Java魔法堂:调用外部程序
前言 Java虽然五脏俱全但总有软肋,譬如获取CPU等硬件信息,当然我们可以通过JNI调用C/C++来获取,但对于对C/C++和Windows API不熟的码农是一系列复杂的学习和踩坑过程.那能不能通 ...
最新文章
- 软件工程第二次作业完整版
- wpf custom control
- linux抓post命令,Linux 使用curl发起post请求的4个常用方式
- maven缺少jar包问题
- Codeforces Round #628 (Div. 2) F. Ehab‘s Last Theorem dfs树
- AppScan api登录接口 postman_如何通过Postman调用EDI系统的API?
- 智慧交通day00-项目简介
- Qt笔记-获取Windows下目前运行的进程信息
- java并发之CopyOnWirteArrayList
- java.math.BigDecimal记录
- 《推荐系统笔记(一)》线性回归方法的数学推导
- 基于markdown消息类型实现钉钉报警,让感官更舒服
- 轻量级的java HTTP Server——NanoHttpd
- 【CTF misc python】加密zip和rar文件的枚举解密工具(python代码)
- 计算机安全模式怎么消除计,大神为你解说win7系统解除word安全模式的妙计
- 网易云音乐网站项目问题整理
- SVG进阶-sprite 雪碧图
- Java绝对好文,转载的!(转载)
- 几种简单的文本数据预处理方法
- execjs 调用js出现找不到windows对象