QT(10)-信号与槽-进程的创建与调用,代码实例

        简单的说,对单个进程的操作就是 创建、启动、停止、挂起多个进程,通过”ID”或者”名称”得到进程句柄进行操作。只是不同环境用的具体函数不一样而已。但是QT多了信号与槽的概念。信号就是触发条件,槽就是响应函数。

 

函数

状态

信号

创建

 

 

 

 

运行(启动)

. start()

starting

readyRead

showResult()

运行(状态改变)

 

Running

stateChanged

showState()

运行(错误)

 

error

errorOccurred

showError()

停止

Exit()

NotRuning

ExitStatus

showFinished()


QT中的进程类与函数:

   QProcess myProcess

创建:myProcess.start();

停止:ExitStatus()

 

下面以打开notepad.exe为例:点击按钮后打开记事本程序。

                          QT(10)-信号与槽-进程的创建与调用,代码实例_第1张图片


上代码:

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    QProcess myProcess;

private:
    Ui::MainWindow *ui;
private slots:
    void on_pB_startThread_clicked();

    void showResult();
    void showState(QProcess::ProcessState);
    void showError();
    void showFinished(int, QProcess::ExitStatus);
};
#endif // MAINWINDOW_H
MainWindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include 
#include 

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(&myProcess, &QProcess::readyRead, this, &MainWindow::showResult);
    connect(&myProcess, &QProcess::stateChanged, this, &MainWindow::showState);
    connect(&myProcess, &QProcess::errorOccurred,  this, &MainWindow::showError);
    connect(&myProcess, SIGNAL(finished(int,QProcess::ExitStatus)),
              this, SLOT(showFinished(int, QProcess::ExitStatus)));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pB_startThread_clicked()
{
    QString program = "notepad.exe";
    QStringList arguments;
 //   arguments << "/c dir&pause";
    myProcess.start(program, arguments);
}

void MainWindow::showResult()
{
    QTextCodec *codec = QTextCodec::codecForLocale();
    qDebug() << "showResult: " << endl << codec->toUnicode(myProcess.readAll());
}

void MainWindow::showState(QProcess::ProcessState state)
{
    qDebug() << "showState: ";
    if (state == QProcess::NotRunning) {
        qDebug() << "Not Running";
    } else if (state == QProcess::Starting) {
        qDebug() << "Starting";
    }  else {
        qDebug() << "Running";
    }
}

void MainWindow::showError()
{
    qDebug() << "showError: " << endl << myProcess.errorString();
}

void MainWindow::showFinished(int exitCode, QProcess::ExitStatus exitStatus)
{
    qDebug() << "showFinished: " << endl << exitCode << exitStatus;
}

 

你可能感兴趣的:(QT(10)-信号与槽-进程的创建与调用,代码实例)