当前位置: 首页 > news >正文

Qt之Cannot create children for a parent that is in a different thread问题分析

问题

在多线程场景中,使用QSerialPort,QTcpSocket等QIODevice设备时出现报Cannot create children for a parent that is in a different thread

分析

QObject构造函数中会检查父对象的线程数据与当前对象的线程数据是否一致

static bool check_parent_thread(QObject *parent,QThreadData *parentThreadData,QThreadData *currentThreadData)
{if (parent && parentThreadData != currentThreadData) {QThread *parentThread = parentThreadData->thread.loadAcquire();QThread *currentThread = currentThreadData->thread.loadAcquire();qWarning("QObject: Cannot create children for a parent that is in a different thread.\n""(Parent is %s(%p), parent's thread is %s(%p), current thread is %s(%p)",parent->metaObject()->className(),parent,parentThread ? parentThread->metaObject()->className() : "QThread",parentThread,currentThread ? currentThread->metaObject()->className() : "QThread",currentThread);return false;}return true;
}

在公有构造函数explicit QObject(QObject *parent=nullptr);和保护构造函数QObject(QObjectPrivate &dd, QObject *parent = nullptr)

QObject::QObject(QObject *parent): d_ptr(new QObjectPrivate)
{Q_ASSERT_X(this != parent, Q_FUNC_INFO, "Cannot parent a QObject to itself");Q_D(QObject);d_ptr->q_ptr = this;d->threadData = (parent && !parent->thread()) ? parent->d_func()->threadData : QThreadData::current();d->threadData->ref();if (parent) {QT_TRY {if (!check_parent_thread(parent, parent ? parent->d_func()->threadData : 0, d->threadData))parent = 0;setParent(parent);} QT_CATCH(...) {d->threadData->deref();QT_RETHROW;}}
#if QT_VERSION < 0x60000qt_addObject(this);
#endifif (Q_UNLIKELY(qtHookData[QHooks::AddQObject]))reinterpret_cast<QHooks::AddQObjectCallback>(qtHookData[QHooks::AddQObject])(this);Q_TRACE(QObject_ctor, this);
}QObject::QObject(QObjectPrivate &dd, QObject *parent): d_ptr(&dd)
{Q_ASSERT_X(this != parent, Q_FUNC_INFO, "Cannot parent a QObject to itself");Q_D(QObject);d_ptr->q_ptr = this;d->threadData = (parent && !parent->thread()) ? parent->d_func()->threadData : QThreadData::current();d->threadData->ref();if (parent) {QT_TRY {if (!check_parent_thread(parent, parent ? parent->d_func()->threadData : 0, d->threadData))parent = 0;if (d->isWidget) {if (parent) {d->parent = parent;d->parent->d_func()->children.append(this);}// no events sent here, this is done at the end of the QWidget constructor} else {setParent(parent);}} QT_CATCH(...) {d->threadData->deref();QT_RETHROW;}}
#if QT_VERSION < 0x60000qt_addObject(this);
#endifif (Q_UNLIKELY(qtHookData[QHooks::AddQObject]))reinterpret_cast<QHooks::AddQObjectCallback>(qtHookData[QHooks::AddQObject])(this);Q_TRACE(QObject_ctor, this);
}

相关文章:

Qt之Cannot create children for a parent that is in a different thread问题分析

问题 在多线程场景中&#xff0c;使用QSerialPort,QTcpSocket等QIODevice设备时出现报Cannot create children for a parent that is in a different thread 分析 QObject构造函数中会检查父对象的线程数据与当前对象的线程数据是否一致 static bool check_parent_thread(Q…...

均值滤波从图像复原角度的解释

廖老师说若将图像生成看作一个随机过程&#xff0c;均值滤波&#xff08;Mean Filtering&#xff09;可以视为在高斯噪声模型下的线性最小均方估计&#xff08;Linear Minimum Mean Squared Error, LMMSE&#xff09;或者极大似然估计&#xff08;Maximum Likelihood Estimatio…...

Tableau数据可视化与仪表盘搭建-数据连接

目录 连接本地文件 课程操作 连接方式&#xff08;实时/数据提取&#xff09; 保存工作簿 筛选器 数据处理 连接数据有三种类型 第一种&#xff0c;连接到本地文件&#xff0c;例如Excel&#xff0c;csv&#xff0c;JSON等 第二种&#xff0c;连接到数据库&#xff0c;例…...

VsCode对Arduino的开发配置

ps&#xff1a;我的情况是在对esp32进行编译、烧录时&#xff0c;找不到按钮&#xff0c;无法识别Arduino文件&#xff0c;适合已经有ini文件的情况。 1.在vscode中安装拓展 2.打开设置&#xff0c;点击右上角&#xff0c;转到settings.json文件 3.复制以下代码并保存 {"…...

2024版idea 插件无法加载

解决方法&#xff1a; 进入Settings 点击plugins 选择 HTTP Proxy Settings 设置成如图所示...

VLMs之Agent之CogAgent:CogAgent的简介、安装和使用方法、案例应用之详细攻略

VLMs之Agent之CogAgent&#xff1a;CogAgent的简介、安装和使用方法、案例应用之详细攻略 导读&#xff1a;在2024年末&#xff0c;智谱于11月29日正式提出了GLM-OS概念&#xff0c;并推出了两款Agent产品——AutoGLM和GLM-PC。为了促进大模型Agent生态的发展&#xff0c;智谱决…...

Unity3D仿星露谷物语开发19之库存栏丢弃及交互道具

1、目标 从库存栏中把道具拖到游戏场景中&#xff0c;库存栏中道具数相应做减法或者删除道具。同时在库存栏中可以交换两个道具的位置。 2、UIInventorySlot设置Raycast属性 在UIInventorySlot中&#xff0c;我们只希望最外层的UIInventorySlot响应Raycast&#xff0c;他下面…...

Kafka优势剖析-消费者组、并行消费

目录 1. 消费者组&#xff08;Consumer Group&#xff09; 1.1 什么是消费者组&#xff1f; 1.2 消费者组的工作原理 1.3 消费者组的优势 2. 并行消费&#xff08;Parallel Consumption&#xff09; 2.1 什么是并行消费&#xff1f; 2.2 并行消费的工作原理 2.3 并行消…...

Docker+Jmeter+InfluxDB+Grafana 搭建性能监控平台

当今互联网发展迅速&#xff0c;应用程序的性能监控显得越来越重要。 DockerJmeterInfluxDBGrafana 是一种常用的性能监控平台&#xff0c;可以帮助开发者快速搭建一套可靠的监控体系。在本文中&#xff0c;我们将介绍如何使用这些工具搭建性能监控平台&#xff0c;以便开发人…...

Maven 详细配置:Maven settings 配置文件的详细说明

Maven settings 配置文件是 Maven 环境的重要组成部分&#xff0c;它用于定义用户特定的配置信息和全局设置&#xff0c;例如本地仓库路径、远程仓库镜像、代理服务器以及认证信息等。settings 文件分为全局配置文件&#xff08;settings.xml&#xff09;和用户配置文件&#x…...

【文本分类】bert二分类

import os import torch from torch.utils.data import DataLoader, Dataset from transformers import BertTokenizer, BertForSequenceClassification, AdamW from sklearn.metrics import accuracy_score, classification_report from tqdm import tqdm# 自定义数据集 class…...

单例模式-如何保证全局唯一性?

以下是几种实现单例模式并保证全局唯一性的方法&#xff1a; 1. 饿汉式单例模式 class Singleton { private:// 私有构造函数&#xff0c;防止外部创建对象Singleton() {}// 静态成员变量&#xff0c;存储单例对象static Singleton instance; public:// 公有静态成员函数&…...

设计模式学习笔记——结构型模式

文章目录 适配器模式 Adapter适用场景UML 桥接模式 Bridge适用场景UML 组合模式 Composite装饰模式 Decorator外观模式 Facade享元模式 Flyweight代理模式 Proxy 适配器模式 Adapter 适用场景 希望使用某个类&#xff0c; 但是其接口与其他代码不兼容时&#xff0c; 可以使用…...

WEB攻防-通用漏洞_文件上传_黑白盒审计流程

目录 前置知识点 Finecms-CMS文件上传 ​编辑 Cuppa-Cms文件上传 Metinfo-CMS 文件上传 前置知识点 思路&#xff1a; 黑盒就是寻找一切存在文件上传的功能应用 1 、个人用户中心是否存在文件上传功能 2 、后台管理系统是否存在文件上传功能 3 、字典目录扫描探针文件上传构…...

RabbitMQ基本介绍及简单上手

&#xff08;一&#xff09;什么是MQ MQ&#xff08;message queue&#xff09;本质上是队列&#xff0c;满足先入先出&#xff0c;只不过队列中存放的内容是消息而已&#xff0c;那什么是消息呢&#xff1f; 消息可以是字符串&#xff0c;json也可以是一些复杂对象 我们应用场…...

服务器证书不受信任是什么问题?

用户在访问某些网站时&#xff0c;可能会遇到“服务器证书不受信任”的警告。这一问题不仅影响用户的浏览体验&#xff0c;更可能对网站的信誉和安全性产生深远影响。那么服务器证书不受信任是什么问题呢&#xff1f; 服务器证书的基本概念 服务器证书是由证书颁发机构(CA)签…...

spring mvc源码学习笔记之十

前面的文章介绍了用 WebApplicationInitializer 或者 AbstractAnnotationConfigDispatcherServletInitializer 来代替 web.xml 。 我们学 java web 的时候就知道&#xff0c;servlet 容器会自动加载 web.xml。 那么&#xff0c;疑问就来了&#xff0c;WebApplicationInitialize…...

Ubuntu 下载安装 elasticsearch7.17.9

参考 https://blog.csdn.net/qq_26039331/article/details/115024218 https://blog.csdn.net/mengo1234/article/details/104989382 过程 来到 Es 的版本发布列表页面&#xff1a;https://www.elastic.co/downloads/past-releases#elasticsearch 根据自己的系统以及要安装的…...

Qt笔记:网络编程Tcp

一、铺垫 1.以下只是告诉诸位怎样去构建服务器与客户端&#xff1b;客户端这样构建肯定没问题&#xff1b;但是服务端不可能这样写&#xff0c;因为他是布置在Linux上的&#xff0c;纯数据类处理服务器&#xff0c;根本不可能用Qt写&#xff1b;这在Qt的http类中就表明了&…...

C++单例模式跨DLL调用问题梳理

问题案例&#xff1a; 假设有这样一个单例模式的代码 //test.h header class Test { public:static Test &instance() {static Test ins;return ins;}void foo(); };void testFoo();//test.cpp source #include "test.h"void Test::foo() {printf("%p\n&q…...

程序员副业变现全指南:从技术到收入

CSDN程序员副业图谱技术文章大纲副业需求分析与市场概况程序员副业的主要动机&#xff1a;收入多元化、技能拓展、兴趣变现当前市场需求&#xff1a;技术咨询、外包开发、在线教育、自媒体等数据支撑&#xff1a;副业收入占比、热门领域统计&#xff08;如AI、Web3、小程序&…...

OpenClaw技能扩展实战:用Qwen3.5-9B构建图片分析工作流

OpenClaw技能扩展实战&#xff1a;用Qwen3.5-9B构建图片分析工作流 1. 为什么需要图片分析工作流 作为一个经常需要处理大量图片的内容创作者&#xff0c;我长期被三个问题困扰&#xff1a;相册混乱难以查找、社交媒体配文耗时、截图信息整理低效。直到发现OpenClaw支持通过S…...

腾讯HY-MT1.5翻译模型应用案例:多语言文档翻译实战

腾讯HY-MT1.5翻译模型应用案例&#xff1a;多语言文档翻译实战 1. 模型概述与核心能力 1.1 模型架构与版本 腾讯开源的HY-MT1.5翻译模型包含两个版本&#xff1a; HY-MT1.5-1.8B&#xff1a;18亿参数版本&#xff0c;专为边缘计算和实时翻译场景优化HY-MT1.5-7B&#xff1a…...

AI Agent Skills 完全指南:从概念到实践,打造你的专属智能体能力库

文章目录一、什么是 Skills&#xff1f;AI Agent 的能力组件1.1 概念起源1.2 Skills 与传统 Prompt 的区别1.3 Skills 的典型应用场景二、主流 AI 编程工具的 Skills 生态2.1 Claude Code&#xff1a;Skills 的开创者2.2 Cursor&#xff1a;Composer 与 Agent 模式的 Skills2.3…...

18-宠物领养系统 mysql+springboot+vue

文档地址 1. 系统简介: 致力于为无家可归的宠物找到一个温暖的家园。作为一个非盈利性的宠物领养平台&#xff0c;目标是通过提供全面的领养信息和专业的宠物照顾知识&#xff0c;促进人们对宠物的了解和关爱。 2. 技术栈: 技术&#xff1a; 基于 B/S 架构 SpringBootMySQL…...

nli-distilroberta-base部署教程:Docker镜像免配置运行DistilRoBERTa NLI API

nli-distilroberta-base部署教程&#xff1a;Docker镜像免配置运行DistilRoBERTa NLI API 1. 项目介绍 nli-distilroberta-base是一个基于DistilRoBERTa模型的自然语言推理(NLI)Web服务。它能帮你快速判断两个句子之间的关系&#xff0c;特别适合需要分析文本逻辑关系的应用场…...

智能车竞赛实战:用英飞凌TC264库函数手把手教你理解C语言高级特性

智能车竞赛实战&#xff1a;用英飞凌TC264库函数手把手教你理解C语言高级特性 在智能车竞赛的备战过程中&#xff0c;许多参赛选手都会遇到一个共同的困境&#xff1a;虽然学过C语言的基础语法&#xff0c;但当面对英飞凌TC264这类工业级芯片的底层库函数时&#xff0c;那些课本…...

Targets.vim多文本对象深度探索:any block和any quote的灵活运用

Targets.vim多文本对象深度探索&#xff1a;any block和any quote的灵活运用 【免费下载链接】targets.vim Vim plugin that provides additional text objects 项目地址: https://gitcode.com/gh_mirrors/ta/targets.vim Targets.vim是一款强大的Vim插件&#xff0c;提…...

终极指南:如何为Evil Icons添加专属品牌图标

终极指南&#xff1a;如何为Evil Icons添加专属品牌图标 【免费下载链接】evil-icons Simple and clean SVG icon pack with the code to support Rails, Sprockets, Node.js, Gulp, Grunt and CDN 项目地址: https://gitcode.com/gh_mirrors/ev/evil-icons Evil Icons是…...

04.Python 循环:while+for详解

1. 循环 while或 for后边都记得加:&#xff08;英文冒号&#xff09; 1.1 while 1.1.1 概述 ① 初始化计数器 ② 编写循环条件&#xff08;判断计数器是否达到了目标位置&#xff09; ③ 在循环内部更新计数器 1.1.2 猜数字案例 #适用于 循环次数未知的情况, 例如: 猜数字游戏.…...