QFuture 无法为位于不同线程中的父级创建子级

Posted

技术标签:

【中文标题】QFuture 无法为位于不同线程中的父级创建子级【英文标题】:QFuture Cannot create children for a parent that is in a different thread 【发布时间】:2013-11-14 15:23:28 【问题描述】:

我正在使用 Qt 进行黑莓 10 开发。我正在使用 QFuture,QtConcurent::run。 所以这是我的代码:

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:无法为不同线程中的父级创建子级。 (Parent是LoadData(0x82ea9b0),parent的线程是QThread(0x8082440),当前线程是QThread(0x82eac68)

为什么会这样?如何解决这个问题?

【问题讨论】:

【参考方案1】:

您首先将新创建的对象移动到正确的线程,然后重新父

QNetworkAccessManager* netManager = new QNetworkAccessManager();
netManager->moveToThread(this->thread());
netManager->setParent(this);

【讨论】:

以上是关于QFuture 无法为位于不同线程中的父级创建子级的主要内容,如果未能解决你的问题,请参考以下文章

无法为不同线程中的父级创建子级

PyQt4 & flask:无法为不同线程中的父级创建子级

(QNativeSocketEngine)QObject:无法为不同线程中的父级创建子级

PyQt 多线程,无法为父级创建子级

QTcpSocket Disconnected() 未发出信号

如何在 .NET Core 中使用默认依赖注入从父级创建子范围?