2015-05-14 54 views
0

我有非常簡單的應用程序,它可以在我的github上可以看出:https://github.com/lejmr/qtquicktestQtQuick,QThread的和信號集成

我意識到什麼是當我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

你只是試圖線程的東西嗎?只需將信號連接到調用該功能的插槽即可QtConcurrent::run

QtConcurrent::run(this, &whateverYourClassIsCalled::cppSlot, param1, param2, etc);