QProcess process; process.start(QString::fromStdString(path)); process.waitForFinished();调用另一个程序时会自动退出
时间: 2024-02-27 21:58:28 浏览: 69
这个问题可能是由于 waitForFinished() 方法阻塞了当前线程导致的。你可以尝试使用 QProcess 的 finished() 信号来处理程序执行结束的事件,而不必调用 waitForFinished() 方法。例如:
```
QProcess process;
process.start(QString::fromStdString(path));
connect(&process, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(onProcessFinished(int, QProcess::ExitStatus)));
void MyClass::onProcessFinished(int exitCode, QProcess::ExitStatus exitStatus)
{
// 处理程序执行结束的事件
}
```
这样可以避免阻塞当前线程,同时也能够在程序执行结束后及时进行处理。
相关问题
F:\test\MCTool\modemCheckTool\workthread.cpp:269: error: C2039: "flush": 不是 "QProcess" 的成员 ..\..\MCTool\modemCheckTool\workthread.cpp(269): error C2039: "flush": 不是 "QProcess" 的成员 D:\Qt\5.15.2\msvc2019\include\QtCore\qprocess.h(110): note: 参见“QProcess”的声明
根据错误信息,`QProcess` 没有名为 `flush` 的成员函数,这是因为 `QProcess` 并没有提供直接的 `flush` 接口。你需要使用 `QProcess` 的 `waitForBytesWritten()` 函数来等待写入操作完成,从而确保数据已经被发送到子进程中。修改代码如下:
```
process.start("cmd.exe",args);
process.waitForStarted();
process.write("echo 98 > /sys/class/gpio/export;echo high > /sys/class/gpio/gpio98/direction;echo 99 > /sys/class/gpio/export;cat /sys/class/gpio/gpio99/value\n");
process.waitForBytesWritten(); // 等待写入操作完成
```
这样就可以确保每次写入的数据都已经发送到子进程中,避免多次命令的组合。
QByteArray execShellCommand(const QString &command) { QProcess process; QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); QString cmd; if (env.contains("ComSpec")) { cmd = env.value("ComSpec"); } else { cmd = "cmd.exe"; } QStringList args; args << "/c" << command; process.start(cmd, args); process.waitForFinished(-1); QByteArray output = process.readAllStandardOutput(); return output; }函数中command应该是什么值
函数中的 `command` 参数应该是一个需要在 Windows 命令行中执行的命令,例如 `dir` 或者 `ipconfig` 等等。这个函数会启动一个进程,使用指定的命令执行该命令,并将命令的输出结果读取为一个 `QByteArray` 对象并返回。在这个函数中,`command` 参数的值将会被放进 `args` 数组中,作为启动进程时的命令行参数。
阅读全文