欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Qt5.9中打开一个cmd进程并且进行数据的读写(QProcess)

程序员文章站 2022-05-28 11:10:47
...

本博客主要总结利用类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程序构建运行后,结果如下图所示:

Qt5.9中打开一个cmd进程并且进行数据的读写(QProcess)

 

Qt5.9中打开一个cmd进程并且进行数据的读写(QProcess)

 

Qt5.9中打开一个cmd进程并且进行数据的读写(QProcess)

 

Qt5.9中打开一个cmd进程并且进行数据的读写(QProcess)

Qt5.9中打开一个cmd进程并且进行数据的读写(QProcess)

 

 

参考内容:

https://zhidao.baidu.com/question/918690935932570299.html(主要参考代码)

https://blog.csdn.net/newbee520/article/details/8279101(关键函数参数讲解)

http://shundacao.blog.163.com/blog/static/134040481201010246283368/(关键函数原理讲解)