QProcess类
QProcess类用于启动外部程序并与它们通信。
需要运行进程时将要运行的程序的名称和命令行参数作为参数传递给 start()。
参数作为 QStringList 中的单个字符串提供。
或者将程序设置为使用 setProgram() 和 setArguments() 运行,然后调用 start() 或 open()。
示例
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QLineEdit>
#include <QPushButton>
#include <QPlainTextEdit>
#include <QProcess>
#include <QLabel>
#include <QDebug>
#include<QTextCodec>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
private:
QLineEdit *comm; //dos命令输入框
QPlainTextEdit *outEdit; //命令执行反馈框
QPushButton *btClick; //执行按钮
QProcess *process; //QProcess
QString output; //接收反馈信息
QLabel *label;
private slots:
void clickExecution(); //点击按钮事件
void readOutput(); //QProcess事件
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//实例命令输入对话框
comm = new QLineEdit(this);
comm->setText("ipconfig");
comm->setGeometry(QRect(20,20,260,25));
//实例执行按钮
btClick = new QPushButton(this);
btClick->setText("执行");
btClick->setGeometry(QRect(290,20,80,25));
connect(btClick,SIGNAL(clicked()),this,SLOT(clickExecution()));
//实例输出对话框
outEdit = new QPlainTextEdit(this);
outEdit->setGeometry(QRect(20,60,350,200));
//实例QProcess
process = new QProcess;
connect(process, SIGNAL(readyRead()), this, SLOT(readOutput()));
//dos命令查阅
label = new QLabel(this);
label->setGeometry(QRect(30,265,200,25));
label->setText(tr("<a href=\"http://www.baidu.com/s?wd=dos命令大全\">命令DOS查阅</a>"));
//开启超链接
label->setOpenExternalLinks(true);
}
MainWindow::~MainWindow()
{
delete ui;
}
//执行DOS命令
void MainWindow::clickExecution()
{
//定义变量接收dos命令
QString info = comm->text();
//执行命令
process->start(info);
//绑定反馈值
outEdit->setPlainText(output);
}
//QProcess 事件
void MainWindow::readOutput()
{
QByteArray qba = process->readAllStandardOutput();
QTextCodec* pTextCodec = QTextCodec::codecForName("System");
QString str = pTextCodec->toUnicode(qba);
outEdit->setPlainText(str);
qDebug() << "output:\n" <<str;
}