QT笔记:Process库

QT笔记:Process库

说明

​ QT 带有Process库用以在原有的进程中开一个新的线程或者其他进程来执行其他程序,这个库调用非常简单,这里给出一个创建一个分离进程来执行bat脚本的示例

示例

#include <QCoreApplication>
#include <QProcess>
#include <QThread>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QStringList arg=a.arguments();

    QString bat_file(".\\..\\..\\..\\tools\\after_build\\after_build.bat");

    arg.removeAt(0);
    qDebug()<<arg;
    arg[0].replace("/","\\");
    arg[1].replace("/","\\");

    QProcess process;

    process.startDetached("cmd.exe",(QStringList()<<"/c")+(QStringList()<<bat_file)+arg);
    //process.start("cmd.exe",(QStringList()<<"/c")+(QStringList()<<bat_file)+arg);

    //process.waitForFinished(-1);

    //qDebug()<<process.readAll();

    //a.exit(0);
    QThread::msleep(1000);
    //return a.exec();
    return 0;
}

问题记录

  1. 开启进程可以用分离形式和合并形式,这两种方式资料有很多,区别在于分离形式开的进程无法通过原来的信号槽机制与主进程进行交互
  2. 程序最后的return a.exec();是进入信号槽交互循环。只有在进入这个循环后调用exit终止主程序主程序才会终止。
  3. 对于命令行程序,由于不带退出按键的UI,如果想分离开启子进程后直接关闭主进程的话就不要进入信号槽交互循环,直接return即可。或者创建一个信号槽,进入循环后定时启动exit信号来退出a

posted on   不回本不改名  阅读(22)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧

导航

< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5
点击右上角即可分享
微信分享提示