我有一个非常简单的应用程序,可以在我的github上看到:https://github.com/lejmr/qtquicktest
我意识到当我的 cppSlot 被调用并且花费太长时间来完成我的GUI时会产生不负责任的行为。因此,我决定在调用 cppSlot 函数时启动一个新线程,以便我将连接部分更新为:
QThread* thread = new QThread;
analyzeSignal.moveToThread(thread);
QObject::connect(item, SIGNAL(doAnalyzeSignal(QString,QString,QString,QString)),
&analyzeSignal, SLOT(cppSlot(QString,QString,QString,QString)));
thread->start();
但是,如果我这样做,我会收到此错误:
QObject:无法为位于不同线程中的父级创建子级。
(Parent是QQuickTextDocumentWithImageResources(0x2ae4de0)
,父亲的帖子是QThread(0x20081e0)
,当前帖子是QThread(0x2302730)
我认为它是由https://github.com/lejmr/qtquicktest/blob/master/main.cpp#L15引起的,我传播了错误的指针(在原始线程上,但是信号是从不同的线程发起的)。
我尝试了很多东西,但我还没有成功。
目标是将被调用程序的输出写入GUI中的文本字段,而不是将其放入控制台。
答案 0 :(得分:0)
你只是想把事情弄好吗?只需将信号连接到使用QtConcurrent::run
QtConcurrent::run(this, &whateverYourClassIsCalled::cppSlot, param1, param2, etc);