2013-11-14 70 views
0

我正在使用Qt進行黑莓10開發。我使用QFuture,QtConcurent :: run。 所以這是我的代碼:QFuture不能爲父母在不同的線程中創建子代

applicationui.cpp

LoadData* Data = new LoadData(url); 
// Invoke our onLoading Finished slot after the loding has finished. 
bool ok = connect(&m_watcher, SIGNAL(finished()),SLOT(onLoadingFinished())); 
Q_ASSERT(ok); 
Q_UNUSED(ok); 

// starts watching the given future 
m_watcher.setFuture(future); 

,並在LoadData.cpp

int LoadData::startLoading() 
{ 
QNetworkAccessManager* netManager = new QNetworkAccessManager(this); 

    const QUrl url(_URL); 
    QNetworkRequest request(url); 

    QNetworkReply* reply = netManager->get(request); 
    bool ok = connect(reply, SIGNAL(finished()), this, SLOT(onReplyFinished())); 
    Q_ASSERT(ok); 
    Q_UNUSED(ok); 
    return 0; 
} 

但是當我運行應用程序,這些是在錯誤控制檯:

QObject:Canno爲不同線程中的父項創建子項。 (Parent是LoadData(0x82ea9b0),父母的線程的QThread(0x8082440),當前線程的QThread(0x82eac68)

爲什麼會出現這種情況?如何解決這個問題?

回答

1

您首先將新創建對象到正確的線程然後重新生成

QNetworkAccessManager* netManager = new QNetworkAccessManager(); 
netManager->moveToThread(this->thread()); 
netManager->setParent(this); 
相關問題