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

转载于:https://www.cnblogs.com/totogo/p/6873386.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值