Qt5.9中打开一个cmd进程并且进行数据的读写(QProcess)
本博客主要总结利用类QProcess打开一个CMD进程,并且向其中写入命令行和读数据,下面将通过一个具体的实例来演示具体用法。(可以直接跳过注意,看1.1内容)
注意:
a1:函数void QProcess::start(const QString &command, OpenMode mode = ReadWrite),表示开启一个线程。下面语句时开启一个cmd进程,具体代码如下:
process.start("cmd");
a2:函数bool QProcess::waitForStarted(int msecs = 30000),表示等待开启线程完成,一般在start()函数后面调用。只有当接受到一个stated信号或者启动完成后,才回解出阻塞。
a3:函数qint64 QProcess::write(const char *data),表示向cmd中写入数据。下面是向cmd线程中写入一条命令语句:dir
process.write("dir\n");
a4:函数bool QProcess::waitForFinished(int msecs = 30000),表示等待完成,一般在启用start()函数后调用,当接收到一个finished信号和启动进程结束后,才解出阻塞,并且返回true。
1.1新建一个widget工程,不要勾选ui界面。然后分别在widget.h,widget.cpp,main.cpp分别添加如下代码。
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QProcess>
#include <QVBoxLayout>
#include <QPushButton>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
void createView();
private slots:
void clickedOpenCmdBtnSlot();
private:
QVBoxLayout *mainLayout;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
createView();
}
void Widget::createView()
{
/*设计GUI界面*/
mainLayout = new QVBoxLayout(this);
mainLayout->setMargin(0);
mainLayout->setSpacing(0);
QPushButton *openCmdBtn = new QPushButton(tr("打开cmd"));
openCmdBtn->setFixedHeight(30);
mainLayout->addWidget(openCmdBtn);
mainLayout->addStretch();
connect(openCmdBtn,SIGNAL(clicked(bool)),this,SLOT(clickedOpenCmdBtnSlot()));
}
void Widget::clickedOpenCmdBtnSlot()
{
/*开启cmd线程,读写数据*/
QProcess process(0);
process.start("cmd"); //启动一个cmd线程
process.waitForStarted(); //等待启动进程完成,超时30s则接触阻塞
process.write("dir\n");
process.write("ipconfig\n");
process.closeWriteChannel();
process.waitForFinished(); //等待启动进程完成,超时30s则接触阻塞
qDebug()<<"p.readAllStandardOutput()=="<<QString::fromLocal8Bit(process.readAllStandardOutput());
}
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.resize(960,640);
w.show();
return a.exec();
}
1.2程序构建运行后,结果如下图所示:
参考内容:
https://zhidao.baidu.com/question/918690935932570299.html(主要参考代码)
https://blog.csdn.net/newbee520/article/details/8279101(关键函数参数讲解)
http://shundacao.blog.163.com/blog/static/134040481201010246283368/(关键函数原理讲解)
上一篇: pyqt学习-1.windows下安装pyqt以及相关配置
下一篇: 记一次奇怪的solr异常。