0

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

有没有办法保持主窗口响应,以便在QProcess /QProcesses 运行/运行时与其交互?

编辑:这是我开始流程的方式:

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

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

4

1 回答 1

2

来自官方文档的信息:

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();
于 2016-01-22T18:23:12.667 回答