目录

官方解析

博主例子

阻塞主程序运行外部程序

使用本地事件循环不阻塞主程序运行外部程序


官方解析

void QProcess::finished(int exitCode, QProcess::ExitStatus exitStatus)

这个信号是当process完成时候才发射的。exitCode是进程退出的代码(指有效的退出,程序崩溃导致的退出无效),并且exitStatus得到了返回值的状态(如return 1,return 0),当进程完成了以后,QProceess里面的缓存区任然是完整的。完成了之后也可以读取他的数据,并且这个数据是事实的,并不是当程序完成,这个缓存区才会有数据。
Note:finished这个信号在QProcess类中被重载了。使用函数指针的语法去连接这个这个信号,必须在静态转化(static cast)中指定其类型,如下面这个栗子!

connect(process, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),[=](int exitCode, QProcess::ExitStatus exitStatus){ /* ... */ });

博主例子

外部程序源码如下:

#include <iostream>
#include <windows.h>
using namespace std;int main(){//Analog data processingfor(int i=0;i<10;i++){cout<<"How are you?"<<endl;cout<<"How old are you?"<<endl;Sleep(1000);}return 100;
}

本程序在本次例子的这个路径中:E:\\vs2012\\QtTestDemo\\Debug\\QtTestDemo.exe

阻塞主程序运行外部程序

源码如下:

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();void executeOtherProcess();private:Ui::Widget *ui;
};#endif // WIDGET_H

main.cpp

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QProcess>
#include <QDebug>
#include <QMessageBox>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);executeOtherProcess();
}Widget::~Widget()
{delete ui;
}void Widget::executeOtherProcess()
{QProcess p;QString cmdString="E:\\vs2012\\QtTestDemo\\Debug\\QtTestDemo.exe";p.start("cmd",QStringList()<<"/c"<<cmdString);p.waitForStarted();p.waitForFinished();QString getStr=QString(p.readAllStandardOutput());QMessageBox::information(this,"提示",getStr);
}

使用本地事件循环不阻塞主程序运行外部程序

使用QEventLoop加应该finished信号就可以完成这个功能(比在线程里面还简单)

这里要注意:当界面起来后,再使用本地事件循环!

运行截图如下:

源码如下:

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private slots:void on_pushButton_clicked();private:Ui::Widget *ui;
};#endif // WIDGET_H

main.cpp

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QProcess>
#include <QDebug>
#include <QEvent>
#include <QMessageBox>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}void Widget::on_pushButton_clicked()
{QProcess p;QString cmdString="E:\\vs2012\\QtTestDemo\\Debug\\QtTestDemo.exe";p.start("cmd",QStringList()<<"/c"<<cmdString);QEventLoop loop;connect(&p,SIGNAL(finished(int,QProcess::ExitStatus)),&loop,SLOT(quit()));loop.exec();QString getStr=QString(p.readAllStandardOutput());QMessageBox::information(this,"提示",getStr);
}

Qt文档阅读笔记-Qt工作笔记QProcess::finished的解析与实例相关推荐

  1. Qt文档阅读笔记-共享库的创建与调用

    使用共享库的符号 这个符号可以作用在变量.类.函数中,并且这些都可以被调用端使用. 在编译共享库中,需要使用export符号.在使用端调用的时候使用import符号. 这里是本人从文档中记录的笔记,大 ...

  2. Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图

    Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图 QHeightMapSurfaceDataProxy:是Q3DSurface的一个基本代理类. 他是专门加载高度图. 高度图是没有X, ...

  3. Qt文档阅读笔记-Rotations Example相关

    Rotations Example文档阅读笔记 使用这种方式,对y轴和z轴进行旋转. QQuaternion yRotation = QQuaternion::fromAxisAndAngle(0.0 ...

  4. Qt文档阅读笔记-Q_ASSERT的另外一总用法(大佬用法)

    刚刚看到文档里面有个Q_ASSERT,好玩的用法! 普通人的用法如下: #include <QApplication> #include <QGraphicsLineItem> ...

  5. Qt文档阅读笔记-QThread::setPriority(Priority priority)官方解析及实例

    目录 官方解析 博主栗子 官方解析 QThread::setPriority(Priority priority) 这个函数为运行的线程设置了优先级.如果这个线程没有运行,那么这么函数啥事都不会做,并 ...

  6. Qt文档阅读笔记-moc工具使用及其理论(moc工具如何添加到makefile中)

    moc(Meta-Object Compiler):用于处理Qt中关于C++的扩展. moc工具读取C++头文件,看看这个头文件里面的类是不是包含Q_OBJECT宏,它会将这个头文件,转换为带有met ...

  7. Qt文档阅读笔记-Fortune Client Example实例解析

    目录 官方解析 实例代码 博主增加解析 官方解析 Fortune Client Example 以使用QTcpSocket为例子,服务端可以配合Fortune Server或Threaded Fort ...

  8. Qt文档阅读笔记-对Style Plugin Example实例的解析

    目录 前言 Style Plugin Example SimpleStylePlugin Class 定义 SimpleStylePlugin Class 实现 main()函数 The Simple ...

  9. Qt文档阅读笔记-QSet官方解析及实例

    目录 官方解析 博主栗子 官方解析 QSet类是一个模板类,他是一个哈希表集合. QSet<T>是Qt的一个普通容器类.QSet存储的值是不指明顺序的,QSet对这些值提供了快速检索的功能 ...

  10. Qt文档阅读笔记-QML Canvas的官方解析及实例

    目录 官方解析 博主例子 官方解析 Canvas可以用于画直线或曲线,简单或复杂的形状,图形,图片,并且他能加文字,颜色,阴影,和颜色梯度,和其他的装饰,可以进行低像素操作.Canvas可以保存成图像 ...

最新文章

  1. 作为Java初学者,你了解Java的应用范围吗?
  2. UDP接收端和发送端_Socket编程
  3. CodeForces - 830C Bamboo Partition(数学+推公式)
  4. 自己动手焊制硬件开发板
  5. 插件properties_PageHelper分页插件的原理是什么
  6. Spring Data 开发环境搭建(二)
  7. Delphi 中的MD5实现方法及delphi2009和delphi2010中用法
  8. idea配置Translation插件为有道翻译引擎
  9. 2021ccpc广州站总结
  10. JVM内存设置参数分析
  11. 继承nn.Module后的 init与forward函数【trian_val、vgg16、faster_rcnn、rpn】.py 学习 文件结构 大工程安排
  12. Ubuntu18.08安装到移动硬盘(UFEI引导)
  13. 房租分期业务系统-抓住新的市场机遇
  14. 命令集matlab,Matlab常用命令集2
  15. 关于if 判断中null为什写前边和在使用equals方法进行判断是为什么要 “1“.equals(str)
  16. 在网站上的视频直播添加弹幕做法
  17. 信息系统项目管理师学习笔记7-项目成本管理
  18. 人脸数据库大全(包括人脸识别、关键点检测、表情识别,人脸姿态等等)
  19. DSP/BIOS简介
  20. C#为WindowsDefender防火墙添加出入站规则

热门文章

  1. 专注于 web报表, web打印, 自定义web表单, web工作流管理系统 方面的技术
  2. C/C++学习笔记:C语言实现任意进制转换,代码全解析!
  3. 搞笑日常:有位程序员的老爸是个什么感觉?过程你绝对意想不到!
  4. 3K和3w的月薪的程序员,差别在哪里?
  5. 我们找了3家制造企业,问问他们是怎么破解供应链难题的
  6. 基于hadoop架构的企业数字化转型,阿里数据中台实战案例
  7. 第一句就是定义了一种ptrfun的C++类型
  8. 【飞秋】Asp.net MVC2 model验证 看似美好,实则让人失望。
  9. WINDOWS的SHELLCODE编写高级技巧
  10. Internet Explorer 6 中的 CSS 增强功能