Qt 调用进程 QProcess的使用详解

小麦大叔 发表于 2022/02/13 01:01:16 2022/02/13
【摘要】 进程的概念 进程是操作系统里的一个概念,所谓进程就是程序执行的时候,会产生程序调度,数据处理等过程,因此一个程序会有多个进程,每个进程有自己独立的数据空间,以允许同时有多位用户执行同一程序,却不会相冲突...

进程的概念

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

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

状态

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

  • 新生(new):进程新产生中。
  • 执行(running):正在执行。
  • 等待(waiting):等待某事发生,例如等待用户输入完成。亦称“阻塞”(blocked)
  • 就绪(ready):排班中,等待CPU。
  • 结束(terminated):完成执行。

PID

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

QProcess

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

需要包含头文件:

#include <QProcess>
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

文章来源: great.blog.csdn.net,作者:小麦大叔,版权归原作者所有,如需转载,请联系作者。

原文链接:great.blog.csdn.net/article/details/122878759

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。