QProcess从QMainWindow冻结窗口开始

时间:2016-01-22 16:19:24

标签: qt5 qprocess modality

我有一个简单的QMainWindow,用户可以在其中设置一些参数。 我有三个按钮,点击后会创建一个显示QProcess的新QMainWindow。例如,主窗口的按钮A启动QProcess A,主窗口的按钮B启动进程B等。 我希望能够与主窗口进行交互,因为现在当我单击按钮时QProcess正确启动,显示另一个窗口等,但原始主窗口保持冻结直到QProcess结束。

有没有办法维持主窗口的响应,以便能够与它进行交互 WHILE QProcess / QProcesses运行/运行?

编辑:以下是我启动流程的方法:

QProcess process;
process.execute("../../RRTStar/RRTStar", QStringList() << "--file" << "../../settings.conf");

其中RRTStar是可执行文件的名称,--file ../../settings.conf是命令行参数。请注意,RRTStar由MainWindow组成,并使用线程运行繁重的计算。

1 个答案:

答案 0 :(得分:1)

官方文件中的信息:

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();