在 Windows 错误中使用 QProcess 启动进程:“计时器只能用于以 QThread 启动的线程”
Posted
技术标签:
【中文标题】在 Windows 错误中使用 QProcess 启动进程:“计时器只能用于以 QThread 启动的线程”【英文标题】:Start process with QProcess on windows error: "Timers can only be used with threads started with QThread" 【发布时间】:2015-09-28 21:01:56 【问题描述】:我有一个最小的例子,我正在尝试开始工作。最终目标是能够将一些信息传达给正在等待“cin”调用的程序。我想这意味着与标准输入有关。
我正在尝试使用一些 Qt 对象来帮助我在这个阶段。虽然我没有使用任何其他 Qt 东西。
我正在尝试给出错误的示例是:
#include <iostream>
#include <QtCore/QString>
#include <QtCore/QProcess>
#include <QtCore/QStringList>
int main()
QProcess process;
QString prog = "test.exe";
// Starting "test.exe":
process.start(prog);
bool started = process.waitForStarted();
std::cout << started << std::endl;
// test.exe is waiting for cin, so give "2":
bool response = process.write("2\n");
std::cout << response << std::endl;
这里是错误信息:
1
QObject::startTimer: Timers can only be used with threads started with QThread
1
QProcess: Destroyed while process ("test.exe") is still running.
【问题讨论】:
我打赌QProcess::waitForStarted()
需要一个事件循环才能发挥作用。您可以尝试在调用之前实例化 QApplication
,或者自己手动创建 QEventLoop
。
【参考方案1】:
在极少数情况下,您将拥有一个没有 QApplication 或 QCoreApplication 的 Qt 应用程序。它们启动事件循环,这是计时器、事件、信号/插槽所必需的。
控制台 XML 解析器可以是这种无事件的应用程序。
看看例如这里有一个最小的 QtCoreApplication 应用程序:How do I create a simple Qt console application in C++?
在子类 QWidget 或 QObject 中开始您的进程。
【讨论】:
以上是关于在 Windows 错误中使用 QProcess 启动进程:“计时器只能用于以 QThread 启动的线程”的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows 上使用 QProcess 读取 GDAL /vsistdout/
Qt:无法使用 QProcess 启动 Windows 控制台