13 QT的QProcess与进程间的通信
来源:互联网 发布:ue编辑器 mac版 编辑:程序博客网 时间:2024/05/21 20:23
QProcess类对象用于调用外部的程序,产生进程,并可以与之进行通信。
用法:
QProcess *p = new QProcess; //1. 创建对象 //2.用QStringList准备好程序执行时需要传递的参数。 // 如我们要执行”mplayer /my.avi -slave -quiet” QStringList args; args << “/my.avi”; args << “-slave”; args << “-quiet”; // 3. 执行程序 p->start(“mplayer”, args); // mplayer程序的路径需在系统的PATH环境变量里,否则需要绝对路径。 // 4. 通信可以通过p->write(..)给mplayer进程发通信内容。而mplayer进程里是通过标准输入获取到。 // 通过p->read()接收mplayer进程给本进程发回的内容(当有内容接收时,会有readyRead信号)。而mplayer进程里是通过标准输出发出的。
简单的应用例子:
linux系统里有bc计算器程序,它是接收用户的输入后,通过标准输出输出结果的。
[root@localhost ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty’.
8*9*2+(1+3)*2 //这是用户的输入
152 //程序输出的结果
那我们在QT里调用它即可实现一个计算器的程序了。
代码:
mywin.h#ifndef MYWIN_H#define MYWIN_H#include <QWidget>#include <QPushButton>#include <QLineEdit>#include <QHBoxLayout>#include <QProcess>class MyWin : public QWidget{ Q_OBJECTprivate: QLineEdit *edit; //接收用户的输入 QPushButton *btn; //点击后计算 QHBoxLayout *hlayout; QProcess *process; //用于调用bc程序public: explicit MyWin(QWidget *parent = 0); ~MyWin();signals:public slots: void slot_btn(); //按钮槽函数 void slot_cal(); //用于接收计算结果的槽函数};#endif // MYWIN_H
mywin.cpp#include "mywin.h"#include <QDebug>MyWin::MyWin(QWidget *parent) : QWidget(parent){ edit = new QLineEdit; btn = new QPushButton("cal"); hlayout = new QHBoxLayout(this); hlayout->addWidget(edit, 8); hlayout->addWidget(btn, 2); process = new QProcess(this); QStringList list; process->start("bc", list); //连接信号与槽 connect(btn, SIGNAL(clicked(bool)), this, SLOT(slot_btn())); connect(process, SIGNAL(readyRead()), this, SLOT(slot_cal()));}MyWin::~MyWin(){ delete hlayout; delete edit; delete btn; process->terminate(); //终止进程工作 process->waitForFinished(); //等进程结束完毕 delete process;}void MyWin::slot_btn(){ QString str = edit->text()+"\n"; //多加个换行符是因为bc在接收用户输入时以换行符为结束一行 process->write(str.toUtf8()); //把要计算的内容传给bc进程}void MyWin::slot_cal(){ qDebug() << process->readAll();}
main.cpp#include <QApplication>#include "mywin.h"int main(int argc, char *argv[]){ QApplication a(argc, argv); MyWin win; win.show(); return a.exec();}
0 0
- 13 QT的QProcess与进程间的通信
- qt进程间的通行 QProcess
- Qt之进程间通信(QProcess)
- Qt之进程间通信(QProcess)
- 【Qt】Qt之进程间通信(QProcess)【转】
- QT进程间通信详细介绍及QProcess机制分析
- 基于Qt的进程类QProcess启动本地Chrome浏览器
- Qt进程间的通信
- QT的进程间通信
- QT的进程间通信
- Qt进程QProcess相关
- Qt 进程 QProcess
- QT新建进程 QProcess
- Qt 进程 QProcess
- Qt技巧:QProcess与外部程序的调用
- Qt技巧:QProcess与外部程序的调用
- Qt技巧:QProcess与外部程序的调用
- Qt:进程与进程间通信
- 多线程的实现方式
- 深入理解JavaScript系列(7):S.O.L.I.D五大原则之开闭原则OCP
- 大数相乘
- springMVC的一个controller方法怎么处理多个请求地址
- Tomcat的简单配置
- 13 QT的QProcess与进程间的通信
- cron表达式轮询操作
- 导航条实例(哔哩哔哩部分)
- DHTML技术演示---动态设置表格行间隔显示、表格排序、鼠标悬停样式改变
- 复习
- 线程池的好处
- Android学习六 Activity
- 水仙花数2074
- 基于最新版本React Native实现JsBundle预加载,界面秒开优化