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内实例化

  • 相关阅读:
    Zabbix 3.0编译安装
    用Python发布自己的代码
    欧拉公式为世界上最完美的公式
    通过别人远端安装anaconda来说配置文件
    jupyter安装与使用
    make在latex中的妙用
    latex源码到PDF文件
    anconda配置国内源
    git命令速查
    一张色环图教你搞定配色(转)
  • 原文地址:https://www.cnblogs.com/totogo/p/6873386.html
Copyright © 2011-2022 走看看