QProcess 从 QMainWindow 冻结窗口启动



我有一个简单的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();

相关内容

  • 没有找到相关文章

最新更新