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

本博客主要总结利用类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
扫描二维码关注公众号,回复: 2367948 查看本文章

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/(关键函数原理讲解)

猜你喜欢

转载自blog.csdn.net/naibozhuan3744/article/details/81133610