zoukankan      html  css  js  c++  java
  • 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内实例化

  • 相关阅读:
    solr 简要笔记
    JQuery select 编程时选中原有的值
    java设计模式图
    java设计模式
    qq空间微博等更多社交平台分享
    API调用开发demo
    fastJson
    小程序开发
    史上最全的机器学习资料(上)
    大数据”学习资源(下)
  • 原文地址:https://www.cnblogs.com/totogo/p/6873386.html
Copyright © 2011-2022 走看看