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

  • 相关阅读:
    JS面向(基于)对象编程--构造方法(函数)
    一个超简单的马里奥游戏
    JavaScript基于对象编程
    JavaScript基础之函数与数组
    Learn CSS
    The first day of HTML
    mysql cmd 无法登录
    datagrid 扩展 页脚 合计功能
    this高级应用
    (xxx.55).toFixed(1) 无法正确进位处理
  • 原文地址:https://www.cnblogs.com/totogo/p/6873386.html
Copyright © 2020-2023  润新知