瞎记:今天在开发的时候遇到了程序间调用的问题,最开始的设想是使用c++来完成,后来想,既然使用Qt进行界面开发的,那能否用Qt来完成相关工作呢,于是展开了这一次旅行。

闲话少说,开始正文,先看一下大致的流程:

  1. 首先,我们通过Qt的那部分模块来实现此功能,牛曰:在`QProcess`模块当中
  2. 其次,我们应该通过怎样一个流程来完成呢,牛历后曰:两步走,首先要启动外部程序,启动之后外部程序会产生相应的动作,也就是说会产生相应的信号;最后,将接受到的信号连接到相应的处理函数上,完成相应的动作。
  3. 最后,我们来看实现

先看个简单版的,启动一个程序

 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相关推荐

  1. Qt|Linux工作笔记-异步调用ping命令,重定向获取信息,界面显示

    逻辑: 1.使用QProcess在开线程前设置输出文件[setStandardOutputFile]; 2.开一个线程,去专门调用shell命令,比如ping: 3.Qt读取重定向文件,进行界面显示: ...

  2. qt调用外部程序(exe)

    1.添加头文件 #include "QProcess"QProcess::startDetached("C:\\Users\\Administrator\\Desktop ...

  3. QProcess调用外部程序

    QT实战教程: QT初步之计时器 QT信号与槽 QT多线程实战 QT文件读写 文章目录 调用系统指令 系统指令返回值 源码地址: QT调用外部程序 调用系统指令 针对类似复制.移动等功能,显然操作系统 ...

  4. python通过调用百度天气API接口获取天气信息

    python调用百度接口,获取天气信息 需要到百度注册开发者账号,通过账号获取到每个账号私有的应用访问(AK) 使用此脚本还需要district_id.csv文档,在我资源中可以免费下载,也可在百度天 ...

  5. 使用C#调用德卡 T10读卡器获取医保卡信息

    文章目录 前言 一.引用部分 1.引入 2.C#方法 前言 C#调用德卡 T10读卡器获取医保卡信息 一.引用部分 1.引入 代码如下 需要一个dll(DC_Reader.dll),一个ini文件(D ...

  6. 微信小程序之登录跳转及调用接口获取信息

    最近学习微信小程序,新学了网页跳转及获取个人信息 网页跳转需要  wx.switchTab方法 获取信息的话,首先调用接口,然后取出数据就可以了. 首先创建两个html文件,代码如下 <view ...

  7. QT 调用vs写的dll 使用OutputDebugString输出调试信息

    vs c++写的dll中使用的cout 将调试信息写到控制台中,但qt调用dll时,cout内容没有办法显示了. 解决办法:使用OutputDebugStringA char buf[128];spr ...

  8. java命令截图,GitHub - xuege-cn/fmj: FMJ (FFMpeg for Java)。通过Java调用FFMpeg命令的方式来对音视频进行处理(获取信息、截图等等)。...

    项目介绍 FMJ (FFMpeg for Java) 通过Java调用FFMpeg命令的方式来对音视频进行处理(获取信息.截图等等). FFMpeg安装 建议使用 ffmpeg-2.6.1 版本 Li ...

  9. java的外部引用_Java 调用外部程序

    在Java中可以调用外部程序,这需要通过Process等类来实现. 创建进程 先来介绍一下Process的创建,我们需要使用ProcessBuilder类.如果需要命令行参数的话,则传入多个参数.比方 ...

  10. java魔法堂_Java魔法堂:调用外部程序

    前言 Java虽然五脏俱全但总有软肋,譬如获取CPU等硬件信息,当然我们可以通过JNI调用C/C++来获取,但对于对C/C++和Windows API不熟的码农是一系列复杂的学习和踩坑过程.那能不能通 ...

最新文章

  1. 软件工程第二次作业完整版
  2. wpf custom control
  3. linux抓post命令,Linux 使用curl发起post请求的4个常用方式
  4. maven缺少jar包问题
  5. Codeforces Round #628 (Div. 2) F. Ehab‘s Last Theorem dfs树
  6. AppScan api登录接口 postman_如何通过Postman调用EDI系统的API?
  7. 智慧交通day00-项目简介
  8. Qt笔记-获取Windows下目前运行的进程信息
  9. java并发之CopyOnWirteArrayList
  10. java.math.BigDecimal记录
  11. 《推荐系统笔记(一)》线性回归方法的数学推导
  12. 基于markdown消息类型实现钉钉报警,让感官更舒服
  13. 轻量级的java HTTP Server——NanoHttpd
  14. 【CTF misc python】加密zip和rar文件的枚举解密工具(python代码)
  15. 计算机安全模式怎么消除计,大神为你解说win7系统解除word安全模式的妙计
  16. 网易云音乐网站项目问题整理
  17. SVG进阶-sprite 雪碧图
  18. Java绝对好文,转载的!(转载)
  19. 几种简单的文本数据预处理方法
  20. execjs 调用js出现找不到windows对象

热门文章

  1. 九度题目1341:艾薇儿的演唱会
  2. pymol作图-输出PNG格式图片
  3. 黑猴子的家:Linux VIM 编辑器
  4. 分布式部署OpenDevOps报502错问题解决全过程
  5. 明确数据分析目标的 3 个步骤
  6. python 倒计时手机app打卡_摆脱拖延症,这些APP让你的时间更高效!
  7. 如何对开发团队的人员进行绩效管理?
  8. CentOS7 安装svn
  9. redis从入门到入魔
  10. 解读品牌KOL运营之路