QT调用外部程序
- 1、通过调用Linux C 函数
system("calc.exe");
- 2、通过QProcess 阻塞调用
QProcess::execute("calc.exe");/QProcess::startDetached("calc.exe");
- 3、通过QProcess,非阻塞调用
QProcess *pro = new QProcess;
pro->start("calc.exe");
注释:
1、前两种方法会阻塞进程,直到计算器程序结束,而第三种方法则不会阻塞进程,可以多任务运行。
2、QT在运行的时候,要启动qws服务,如果用前两种方法,运行的时候,要新开启一个qws,否则不能运行;而第三种方法,则不需要在开启qws,他和主进程公用一个qws。
3、第三种虽然不会阻塞,但是有可能在终端上看不到打印出来的信息。所以要在终端显示信息,可以考虑阻塞模式。
QProcess对象可以直接执行cmd的命令,但是ping操作是会阻塞的,所以需要在子线程里ping
QProcess *tempCmd = new QProcess();
tempCmd->start(orderInfo);
tempCmd->waitForFinished(1000);//阻塞等待执行命令完成,否则返回的很可能是空字符串
QString resultInfo = QString::fromLocal8Bit(tempCmd->readAllStandardOutput());//resultStr就是返回结果,需要fromLocal8Bit来接收中文
ps:上面使用的是Qprocess::start,还可以使用QPocess::startDetached,
区别:https://blog.youkuaiyun.com/u014597198/article/details/52624975
1)一体式:void QProcess::start(const QString & program, const QStringList & arguments, OpenMode mode = ReadWrite)
外部程序启动后,将随主程序的退出而退出。
2)分离式:void QProcess::startDetached(const QString & program, const QStringList & arguments, const QString & workingDirectory = QString(), qint64 * pid = 0)
外部程序启动后,当主程序退出时并不退出,而是继续运行。
侵删