QT QProcess调用外部程序

目录

概述

启动状态

同步进程API


概述

Qt提供QProcess调用外部程序,继承QIODevice,因此我们可以把它当作是一个I/O设备进行读写操作,启动程序有两种方式

一体式(外部程序启动后,将随主程序的退出而退出)

    void start(const QString &program, const QStringList &arguments, OpenMode mode = ReadWrite);
#if !defined(QT_NO_PROCESS_COMBINED_ARGUMENT_START)
    void start(const QString &command, OpenMode mode = ReadWrite);
#endif
    void start(OpenMode mode = ReadWrite);

需要注意是路径中带有空格,QProcess无法识别

//1-不带空格。能够启动
process->start("C:/ProgramFiles/Center/Center.exe");

//2-带空格,无法启动
process->start("C:/Program Files/Center/Center.exe");

//3-带空格,使用带參模式。能够启动
process->start("C:/Program Files/Center/Center.exe", QStringList("C:/Program Files/Center/Center.exe"));

分离式(外部程序启动后,当主程序退出时并不退出。而是继续执行)


bool startDetached(qint64 *pid = nullptr);
static bool startDetached(const QString &program, const QStringList &arguments,
                              const QString &workingDirectory
#if defined(Q_QDOC)
                              = QString()
#endif
                              , qint64 *pid = nullptr);
#if !defined(Q_QDOC)
    static bool startDetached(const QString &program, const QStringList &arguments); // ### Qt6: merge overloads
#endif
    static bool startDetached(const QString &command);

 参数说明[program 或command]执行程序路径或者命令

[arguments]设置参数(可选)

[mode]启动模式QIODevice::OpenModeFlag

启动状态

外部程序未启动时。其状态是NotRunning;
当启动时,其状态转变为Starting,正在启动。但此时还未调用起来。
启动之后,继续变为Running,同一时候发射出started()信号,此时,能够对QProcess进行读写操作了。
当退出时,其状态改为NotRunning。并发射出finished()信号。finishe()信号会携带退出码和退出状态,能够分别通过exitCode()和exitStatus()来获得。
当错误发生时,QProcess会发出一个error()信号。相同的。也能够通过error()来获得其错误类型,通过state()获得当前程序的状态。

同步进程API

QProcess提供了一系列的函数以提到事件循环来完毕同步操作:
(1)waitForStarted()          : 堵塞。直到外部程序启动
(2)waitForReadyRead()    : 堵塞,直到输出通道中的新数据可读
(3)waitForBytesWritten()  : 堵塞,直到输入通道中的数据被写入
(4)waitForFinished()        : 堵塞,直到外部程序结束
    假设在主线程(QApplication::exec())中调用这些函数,可能会造成当前用户界面不响应。官方示例:

QProcess builder;
builder.setProcessChannelMode(QProcess::MergedChannels);
builder.start("make", QStringList() << "-j2");

if (!builder.waitForFinished())
    qDebug() << "Make failed:" << builder.errorString();
else
    qDebug() << "Make output:" << builder.readAll();

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路奇怪

有钱出钱,没钱多出编程主意啊

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值