QT启动外部程序、运行状态监控、搭建运行环境(学习记录)

        QT的QProcess类用于管理外部进程的启动,同时可以根据QProcess::stateChanged(QProcess::ProcessState newState)信号监控程序的运行状态。

        首先需要在.h头文件包含: #include<QProcess>;

        声明QProcess对象: QProccess *m_pProcess;

        然后在.cpp分配空间:m_pProcess = new QProcess(this);

        启动程序分为,外部独立启动:m_pProcess->startDetached(AA.exe);和包含启动m_pProcess->start(AA.exe);,外部独立启动时,QT界面的程序输出栏会输出外部程序的调试内容,包含启动方式不显示。QT程序关闭时,包含启动的程序会自动跟随关闭,独立启动的程序仍然会独立运行,无影响。

        程序启动内部调用cmd启动,直接运行AA.exe,系统无法找到该程序,需指定路径或者将AA.exe路径添加到系统环境中。

        为保持QT程序良好的移植性,可以在程序启动时自动设置临时环境变量,只在QT程序运行时有效,设置完临时环境变量之后再启动m_pProcess。

void MainWindow::setEnvironment()
{
QString environmentPath = qgetenv("path"); //qgetenv函数获取系统环境变量
QString exepath = qApp->applicationDirpath(); //exe路径
exepath.append("/dependency"); //在QT程序的exe目录下新建dependency文件夹,放入需要启动的程序及环境
environmentPath  += QDir::toNativeSeparators(exepath).prepend(';'); //QT自动获取的路径包含斜杠“/”,系统环境变量需要反斜杠“\”,toNativeSeparators函数自动将路径变为适应系统格式的路径;可以将需要运行的exe变量加到系统环境变量的最前边或者用append添加到最后边都可以
qputenv("path",environmentPath.toStdString().c_str()); //变换格式,然后存入系统环境变量,这样就可以临时添加系统环境变量了,QT程序退出后,环境变量也就消失了
}

        获取启动的exe程序的运行状态可以添加connect监控:

connect(m_pProcess,&QProcess::stateChanged,this,&MainWindow::getProState);

        信号分为三种,未运行、运行中、启动中。根据反馈的不同信号,监控exe程序运行状态并进行相应处理,这样可以确定是否打开或者关闭程序,是否可以write指令。

void MainWindow::getProState(QProcess::ProcessState state)
{
    switch(state)
    {
        case QProcess::NotRunning:  //exe程序未运行
        {
            qDebug()<<"exe程序未运行!";
        }
        break;
        case QProcess::Starting:  //exe程序启动中
        {
            qDebug()<<"exe程序启动中!";
        }
        break;
        case QProcess::Running:  //exe程序运行中
        {
            qDebug()<<"exe程序运行中!";
        }
        break;
        default:
        {
            qDebug()<<"exe程序其他状态!";
        }
        break;
    }
}

        析构函数中需要删除建立的进程:

delete m_pProcess ;
m_pProcess = NULL;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

胖墩墩的小火苗子

创作不易,谢谢鼓励!

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

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

打赏作者

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

抵扣说明:

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

余额充值