Qt 调用进程 QProcess的使用详解

网友投稿 1391 2022-05-30

Qt 调用进程 QProcess的使用详解

进程的概念

进程是操作系统里的一个概念,所谓进程就是程序执行的时候,会产生程序调度,数据处理等过程,因此一个程序会有多个进程,每个进程有自己独立的数据空间,以允许同时有多位用户执行同一程序,却不会相冲突。

所以引申出一些其他的概念。

状态

进程在执行时,状态(state)会改变。所谓状态,就是指进程目前的动作:

新生(new):进程新产生中。

执行(running):正在执行。

等待(waiting):等待某事发生,例如等待用户输入完成。亦称“阻塞”(blocked)

就绪(ready):排班中,等待CPU。

结束(terminated):完成执行。

PID

每个进程都有自己的标识符(ID),我们称之为PID;

QProcess

Qt 中可以使用QProcess类对进程进行操作,允许操作外部程序并进行通讯。

需要包含头文件:

#include qmake: QT += core Inherits: QIODevice

1

2

3

4

5

具体可以参考文档:https://doc.qt.io/qt-5/qprocess.html

下面是常用的public function:

QProcess(QObject *parent = nullptr) virtual ~QProcess() QStringList arguments() const void closeReadChannel(QProcess::ProcessChannel channel) void closeWriteChannel() QProcess::CreateProcessArgumentModifier createProcessArgumentsModifier() const QProcess::ProcessError error() const int exitCode() const QProcess::ExitStatus exitStatus() const QProcess::InputChannelMode inputChannelMode() const QString nativeArguments() const QProcess::ProcessChannelMode processChannelMode() const QProcessEnvironment processEnvironment() const qint64 processId() const QString program() const QByteArray readAllStandardError() QByteArray readAllStandardOutput() QProcess::ProcessChannel readChannel() const void setArguments(const QStringList &arguments) void setCreateProcessArgumentsModifier(QProcess::CreateProcessArgumentModifier modifier) void setInputChannelMode(QProcess::InputChannelMode mode) void setNativeArguments(const QString &arguments) void setProcessChannelMode(QProcess::ProcessChannelMode mode) void setProcessEnvironment(const QProcessEnvironment &environment) void setProgram(const QString &program) void setReadChannel(QProcess::ProcessChannel channel) void setStandardErrorFile(const QString &fileName, QIODevice::OpenMode mode = Truncate) void setStandardInputFile(const QString &fileName) void setStandardOutputFile(const QString &fileName, QIODevice::OpenMode mode = Truncate) void setStandardOutputProcess(QProcess *destination) void setWorkingDirectory(const QString &dir) void start(const QString &program, const QStringList &arguments, QIODevice::OpenMode mode = ReadWrite) void start(const QString &command, QIODevice::OpenMode mode = ReadWrite) void start(QIODevice::OpenMode mode = ReadWrite) bool startDetached(qint64 *pid = nullptr) QProcess::ProcessState state() const bool waitForFinished(int msecs = 30000) bool waitForStarted(int msecs = 30000) QString workingDirectory() const

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

常见用法

Windows系统下,打开文本编辑器;

QString filename = "TEST.txt"; QProcess process; process.setWorkingDirectory("C:\\Windows\\System32"); process.start("notepad.exe", QStringList() << filename); process.waitForFinished (-1); //等待进程结束

1

2

3

4

5

Qt 任务调度

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:那个做云原生的前端
下一篇:深入理解学习Git工作流(git-workflow-tutorial)
相关文章