我有一个简单的QMainWindow
,用户可以在其中设置一些参数。我有三个按钮,单击它们时,会创建一个显示QMainWindow
的新QProcess
。例如,主窗口的按钮A
启动QProcess A
,主窗口的按钮B
启动进程B
,等等。我希望能够与主窗口进行交互,因为现在当我单击按钮时,QProcess
会正确启动,显示另一个窗口等,但原始主窗口保持冻结状态,直到QProcess
结束。
有没有办法保持主窗口的响应,以便在QProcess/QProcesses运行/运行时可以与之交互?
编辑:这是我启动流程的方式:
QProcess process;
process.execute("../../RRTStar/RRTStar", QStringList() << "--file" << "../../settings.conf");
其中RRTStar
是可执行文件的名称,--file ../../settings.conf
是命令行参数。请注意,RRTStar 由一个 MainWindow 组成,并使用线程运行大量计算。
来自官方文档的信息:
int QProcess::execute(const QString & program, const QStringList & arguments)
使用新参数中的参数启动程序程序 进程,等待它完成
如果要进行异步非阻塞调用,则需要使用 QProcess::start():
void QProcess::start(const QString & program, const QStringList & arguments, OpenMode mode = ReadWrite)
关于与进程的交互:它继承了QIODevice,所以
QProcess 允许您将进程视为顺序 I/O 设备。你 可以写入和读取进程,就像访问 使用 QTcpSocket 的网络连接。然后,您可以写信给 通过调用 write() 来进程的标准输入,并读取标准 通过调用 read()、readLine() 和 getChar() 输出。因为它 继承了QIODevice...
process.write("Qt rocks!");
//...
QByteArray result = process.readAll();