QObject: Cannot create children for a parent that is in a different thread.

在使用QNetworkAccessManager类时,用到线程了,

运行后提示:

QObject: Cannot create children for a parent that is in a different thread.

Parent is QNetworkAccessManager(0x7bfe60), parent's thread is QThread(0x8b73)

搜索了一下 ,发现有这篇文章,参照 即可解决

有可能大家在利用qt写程序的时候遇到这类提醒,这事实上是再说父类和子类的线程不对。

下面是我没解决错误前的代码

     thread_http = new QThread;
    thread_query = new QThread;
    httpA = new HttpGP;
    seriportQuery = new SeriportQuery;
    httpA->moveToThread(thread_http);
//    httpA->accessManager->moveToThread(thread_http);
    seriportQuery->moveToThread(thread_query);
    thread_http->start();
    thread_query->start();

我线性的认为把一个类放到线程里那么相关的内部一切都放到子线程中了,结果就是那么尴尬出现了上面的错误。


这里指出,QNetworkAccessManager 也是一个独立的类并不从属HttpGP 这个类,所以它实际在工作在主线程,而执行完上述代码后HttpGP执行在子线程中,线程不匹配导致了错误的出现。


解决的办法就是让QNetworkAccessManager也移到HttpGP所在的线程,

httpA->accessManager->moveToThread(thread_query);//就是解决方法

例外就是在声明后面加入(this)

    accessManager = new QNetworkAccessManager(this);

如果你在run()中实现的,那就是在run内实例化

posted @ 2017-05-18 14:53  伟大的厨师  阅读(3165)  评论(0编辑  收藏  举报