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