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_OBJECT
private:
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();
}