在QT creator中,为了在Project中调用.exe应用程序, QT提供了QProcess类,QProcess可以用于完毕启动外部程序,并与之交互通信。
1. 启动外部程序的两种方式
要启动Process,请将要作为参数运行的程序的名称和命令行参数传递给 start()。参数在 QStringList 中作为单个字符串提供。
QObject *parent;
QString program = "./path/to/Qt/examples/widgets/analogclock";
QStringList arguments;
arguments << "-style" << "fusion";
QProcess *myProcess = new QProcess(parent);
myProcess->start(program, arguments);
1> 第一种启动方式,一体式:started()
void start(const QString &program, const QStringList &arguments, QIODevice::OpenMode mode = ReadWrite)
进程是异步启动的,这意味着started()和erroroccurs()信号可能会延迟。调用waitForStarted()以确保进程已经启动(或启动失败),并且已经发出了那些信号。
外部程序启动后,将随着主程序的退出而退出。
2> 第二种启动方式,分离式:startDetached()
void QProcess::startDetached(const QString & program, const QStringList & arguments, const QString & workingDirectory = QString(), qint64 * pid = 0)
在新进程中用setArguments()设置的参数启动由setProgram()设置的程序,并与之分离。成功时返回true;否则返回false。如果调用进程退出,被分离的进程将不受影响地继续运行。
外部程序启动后,当主程序退出时并不退出。而是继续执行。
2. 其他函数及知识:
waitForStarted() 模块:监督QProcess的开始。
waitForReadyRead() 模块: 直到当前读通道上有新数据可读为止。
waitForBytesWritten() 模块:直到将一个有效负载的数据写入流程。
waitForFinished() 模块: 监督进程结束。
3.注:从主线程(调用QApplication::exec()的线程)调用这些函数可能会导致用户界面冻结。
这个问题应该怎么解决啊???