QT(12)-进程-基本操作-示例源码
简单的说,对单个进程的操作就是 创建、启动、停止、挂起;多个进程,通过”ID”或者”名称”得到进程句柄进行操作。只是不同环境用的具体函数不一样而已。但是QT多了信号与槽的概念。信号就是触发条件,槽就是响应函数。
|
| 函数 | 状态 | 信号 | 槽 |
| 创建 |
|
|
|
|
| 运行(启动) | . start() | starting | readyRead | showResult() |
| 运行(状态改变) |
| Running | stateChanged | showState() |
| 运行(错误) |
| error | errorOccurred | showError() |
| 停止 | Exit() | NotRuning | ExitStatus | showFinished() |
QT中的进程类与函数:
QProcess myProcess
创建:myProcess.start();
停止:ExitStatus()
下面以打开notepad.exe为例:点击按钮后打开记事本程序。

上代码:
MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QProcess>
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 <QDebug>
#include <QTextCodec>
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;
}

浙公网安备 33010602011771号