QT QProcess的使用

定义

The QProcess class is used to start external programs and to communicate with them.

QProcess类是用来启动一个外部程序并与之通信。

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(Qt实战项目视频教程+代码,C++语言基础,C++设计模式,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

使用说明

开启外部线程的3中方式

想要启动一个进程,可以传递你想启动的程序的名字和命令行参数作为参数传递给start()函数。参数作为QStringList中每一个单独的字符串。

或者,你可以通过setProgram()和setArguments()来设置该程序,然后调用start()或者open()启动该程序。

启动时在指定程序名时就附带上参数

QProcess process;
process.start("cmd /c ping 127.0.0.1");

启动时分别指定函数名和参数列表

QProcess process;
process.start("cmd", QStringList()<<"/c"<<"ping 127.0.0.1", QIODevice::ReadWrite);

分别指定函数名和参数,然后再启动

QProcess process;
process.setProgram("cmd");
process.setArguments(QStringList()<<"/c"<<"ping 127.0.0.1");
process.start(QIODevice::ReadWrite);

一次性读取进程输出

void readProcessAllOnce(bool processAutoExit) {
    qDebug()<<"readProcessAllOnce, processAutoExit ="<

QT QProcess的使用_第1张图片

按行读取进程输出

void readProcessByLine() {
    qDebug()<<"readProcessByLine";
    qDebug()<<"----------------------";
    bool ret;
    QProcess process(0);
    /*
     * cmd /c 的命令执行完后会关闭窗口
     * cmd /k 的命令执行完后不会关闭窗口
     *
     * aa && bb 就是执行aa,成功后再执行bb
     * aa || bb 先执行aa,若执行成功则不再执行bb,若失败则执行bb
     * a  &  b  表示执行a再执行b,而无论a是否成功
     */
    process.start("cmd", QStringList()<<"/k"<<"ping 127.0.0.1"<<"&"<<"exit", QIODevice::ReadWrite);
//    process.setProgram("cmd");
//    process.setArguments(QStringList()<<"/k"<<"ping 127.0.0.1"<<"&"<<"exit");
//    process.start(QIODevice::ReadWrite);
    ret = process.waitForStarted();
    qDebug()<<"waitForStarted"<

QT QProcess的使用_第2张图片

与进程交互

void openProcessThenWrite() {
    qDebug()<<"openProcessThenWrite";
    qDebug()<<"----------------------";
    bool ret;
    QProcess *process = new QProcess(QThread::currentThread());
    /*
     * 如果没有QCoreApplication的话,会报如下错误
     * QObject::startTimer: Timers can only be used with threads started with QThread. timer只能在同一个线程中创建和启动.
     */
    process->start("cmd", QIODevice::ReadWrite);
    ret = process->waitForStarted();
    qDebug()<<"waitForReadyRead"<readAllStandardOutput();
    QString str = QString::fromLocal8Bit(byteArray);
    qDebug()<write("ping 127.0.0.1\r\nexit\r\n");
    qDebug()<<"write len"<waitForReadyRead();
        qDebug()<<"waitForReadyRead"<readAllStandardOutput();
        str = QString::fromLocal8Bit(byteArray);
        qDebug()<waitForFinished();
    qDebug()<<"waitForFinished"<close();
    delete process;
    qDebug()<<"";
    qDebug()<<"======================";
}

QT QProcess的使用_第3张图片

测试函数

#include 
#include 
#include 
#include 
#include 

void readProcessAllOnce(bool processAutoExit) {
    ……
}

void readProcessByLine() {
    ……
}

void openProcessThenWrite() {
    ……
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    qDebug()<<"======================";
    readProcessAllOnce(false);
    readProcessAllOnce(true);
    readProcessByLine();
    openProcessThenWrite();

    qDebug()<<"That's all";
    return a.exec();
}

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(Qt实战项目视频教程+代码,C++语言基础,C++设计模式,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

你可能感兴趣的:(QT开发,qt,C++项目,qt开发,qt教程,QProcess)