QtQuick,QThread和信号集成

时间:2015-05-14 08:51:25

标签: c++ multithreading qt qt5

我有一个非常简单的应用程序,可以在我的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中的文本字段,而不是将其放入控制台。

1 个答案:

答案 0 :(得分:0)

你只是想把事情弄好吗?只需将信号连接到使用QtConcurrent::run

调用该函数的插槽
QtConcurrent::run(this, &whateverYourClassIsCalled::cppSlot, param1, param2, etc);