我有一个简单的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组成,并使用线程运行繁重的计算。
答案 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();