Qt开发-Qt对象间的关系

2023-05-16

一、Qt对象间的关系

1、Qt对象间可以存在父子关系

(1)、每个对象都保存有它所有子对象的指针

(2)、每一个对象都有一个指向其父对象的指针

2、当指定Qt对象的父对象时

(1)、其父对象会在子对象链表中加入该对象的指针

(2)、该对象会保存指向其父对象的指针

#include <QtCore/QCoreApplication>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QObject* p = new QObject();
    QObject* c1 = new QObject();
    QObject* c2 = new QObject();

    c1->setParent(p);
    c2->setParent(p);

    qDebug() << c1;
    qDebug() << c2;

    const QObjectList list = p->children();
    for(int i=0; i<list.length(); i++)
    {
        qDebug() << list[i];//打印的两个分别与c1和c2一样
    }
    

    qDebug() << c1->parent();
    qDebug() << c2->parent();
    qDebug() << p;//三个打印的值都一样

    return a.exec();
}

3、当对象被销毁时

(1)、将自己从父对象的Children List移除

(2)、将自己的Children List中的所有对象销毁

注:使用Qt开发时,不仅要时刻注意内存泄漏的问题,还要时刻关注对象是否可能被多次销毁的问题

4、对象树

(1)、利用Qt对象间的父子关系可以构成对象树

(2)、删除树中的节点时会导致对应的子树被销毁

#include <QtCore/QCoreApplication>
#include <QDebug>
class MObj : public QObject//Qt对象采用父子间的关系
{
    QString m_name;
public:
    MObj(const QString& name)
    {
        m_name = name;

        qDebug() << "Constructor: " << m_name;
    }

    ~MObj()
    {
        qDebug() << "Destructor: " << m_name;
    }
};


void delTest()
{
    MObj* obj1 = new MObj("obj1");
    MObj* obj2 = new MObj("obj2");
    MObj* obj3 = new MObj("obj3");
    MObj* obj4 = new MObj("obj4");//调用四次构造函数

    obj2->setParent(obj1);
    obj3->setParent(obj1);
    obj4->setParent(obj3);

    delete obj3;//会同时销毁obj3和obj4
   // delete obj4;//运行会发生错误,相当于对obj4销毁了两次

    const QObjectList& list = obj1->children();

    qDebug() << "obj2: " << obj2;

    for(int i=0; i<list.length(); i++)
    {
        qDebug() << list[i];
    }

}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    delTest();

    return a.exec();
}

二、小结

(1)、Qt对象间可以存在父子关系

(2)、通过父子关系能够获得Qt对象树

(3)、Qt对象销毁时解除和父对象间的父子关系

(4)、Qt对象销毁时将同时销毁所有的子对象

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt开发-Qt对象间的关系 的相关文章

  • 用D435i录制自己的数据集运行ORBslam2并构建稠密点云

    一 录制rosbag 二 播放rosbag并用rviz查看topic xff0c 记下rgb和depth流话题名 三 用如下脚本 xff08 python2而不是3 xff09 保存rgb和depth图片同时生成rgb txt depth
  • Unrecoverable error: corrupted cluster config file.

    from https www cnblogs com topicjie p 7603227 html 缘起 正在欢乐的逗着孩子玩耍 xff0c 突然间来了一通电话 xff0c 值班人员告诉我误重启了一台服务器 xff0c 是我负责的服务 x
  • 树莓派3B+无屏幕和键盘配置树莓派WiFi和SSH

    前言 树莓派3B 43 安装系统Raspbian xff0c 默认的SSH是关闭的 xff0c 如何在无屏幕和键盘的情况下 xff0c 让笔记本通过WIFI访问树莓派 树莓派3B 43 发布后不久 xff0c 树莓派官方 Raspbian
  • ubuntu分区设置

    ubuntu分区设置 swap区 xff1a 逻辑分区 xff0c 虚拟内存类似 xff0c 大小和电脑内存一样大 xff1b boot区 xff1a 主分区 xff0c 引导系统的 xff0c 分配200M 500M xff0c 条件好些
  • 图像系统概述和名词解析

    图像系统组成 光源 xff08 包含人造光 自然光 闪光灯 xff09 照到物体上 xff0c 光线反射进入成像系统 xff0c 经过镜头 xff08 对于变焦镜头有驱动马达调整镜片位置 xff0c 实现变焦 xff09 光圈 滤光片 快门
  • 海思IQ图像清晰度调试策略

    总策略 影响清晰度的关键指标 xff1a 锐度 噪点和gamma Gamma调试步骤 YUVsharpen锐度调试 LDCI局部对比度调节 Dehaze调节 去雾算法主要用在有场景中做处理 xff0c 调整图像的对比度使更加清 去雾算法主要
  • 海思ISP曝光调整策略

    AE曝光调整 Exposure Attr 影响参数 xff1a ExpTimeRange Min Max 曝光时间Gain 各种增益控制Speed 曝光速度 xff08 影响到曝光收敛 xff0c AE闪烁 xff09 Compensati
  • ADS(ARM Developer Suite)安装与卸载中的问题(转)

    ADS用来对ARM的裸机代码进行编辑和调试 我在安装ADS1 2的过程中 xff0c 遇到了一个小问题 xff0c 写下来和大家分享一下解决方法 1 在安装程序 xff0c 进度条到100 时 xff0c 会一直停在那 xff0c 十几分钟
  • ucosIII 学习资料汇总

    网站 书籍 1 嵌入式实时操作系统uc OS III 邵贝贝译 这本书其实就是一本工具书 xff0c 我参考了官方的说明文档 xff0c 发现雷同很高 感觉就是官方说明文档翻译的 xff0c 用来应用查查接口还有点用 xff0c 不是十分推
  • USB协议传输结构

    USB作为数据通信标准 xff0c 固件可分为枚举配置和类协议部分 xff0c 枚举配置实现USB主机对设备的枚举和配置 xff0c 类协议实现设备各自的数据传输 usb2 0协议chapter8 protocol layer 1 USB协
  • 蓝牙HCI协议

    HCI 层位于蓝牙高层协议和低层协议之间 xff0c 提供了对基带控制器和链路管理器的命令以及访问蓝牙硬件的统一接口 它是我们实现自己的蓝牙设备要接触的第一个蓝牙协议 起着承上启下的作用 HCI通过包的方式来传送数据 命令和事件的 xff0
  • 标准USB设备请求命令

    一 标准的usb设备请求命令 控制传输是最重要和结构最复杂的一种传输类型 控制传输的 初始设置步骤 中包含了1 个8 字节的DATA0 数据包 参见图6 6 这8 字节的数据包是主机用来发送控制阶段中的请求命令的 而这些请求命令是主机配置U
  • 卡尔曼滤波基本公式推导(高斯乘积法)

    前言 卡尔曼滤波的推导这里给出两种推导方法 xff1a 一种是利用高斯乘积定理和贝叶斯公式推导出来 的 xff0c 另一种借用的是最小误差的思想 xff08 IMSE xff09 关于卡尔曼滤波的应用场景以及通俗的解释 xff0c 我相信各
  • 计算机组成原理(唐朔飞)

    计算机组成原理 唐朔飞 存储器 存储器分类 存储介质分类 半导体存储器磁表面存储器磁芯存储器 淘汰 存储方式 存储结构 存储器容量 地址总线 xff1a CPU能访问的地址宽度 xff0c 32地址线表示能访问2的32次方个存储单元地址 数
  • ubuntu配置静态IP、DNS地址

    虚拟机需要使用桥接上网 1 ifconfig 查看网卡信息 2 vi etc network interfaces 打开并编辑配置文件 配置说明 xff1a auto lo iface lo inet loopback auto ens33
  • c调用libcurl库发送GET 和 POST请求

    libcrul请求的基本套路流程 1 调用curl global init 初始化libcurl2 调用curl easy init 函数得到 easy interface型指针3 调用curl easy setopt 设置传输选项4 根据
  • LINUX 操作GPIO口

    两种方法 1 写驱动的方式 缺 2 通过linux提供的用户空间 终端控制 通过在用户空间上来操作GPIO xff0c 控制入口在 xff1a sys class gpio 首先确认内核里是否已选择上gpiolib的sysfs接口功能 默认
  • V4L2简介

    http work blog readthedocs org en latest v4l2 20intro html 第一章 V4L2简介 1 1 什么是v4l2 V4L2 xff08 Video4Linux的缩写 xff09 是Linux
  • 电子设计项目

    全套完整毕业设计智能家居控制系统设计 16X16点阵滚动显示 单片机595 43 138LED点阵 基于WIFI传输的单片机传感器设计 xff08 毕业论文 xff09 基于单片机设计的多点测温系统 数码管显示温度 基于单片机设计的公交报站
  • 视觉惯导里程计VIO综述

    最近阅读了VIO中的一些论文 xff0c 在这里做个汇总方便以后查阅 xff0c 如有问题欢迎指正 一 背景 VIO xff08 Visual Inertial Odometry xff09 视觉惯导里程计 xff0c VINS xff08

随机推荐

  • 【Cocos2d-X-2.1.4游戏引擎】发布第一个游戏

    有一段时间没更新博客了 xff0c 最近一直在写一个小游戏 xff0c 游戏在今天终于搞好了 xff0c 又可以开始写写博客 xff0c 打打dota的悠闲的日子了哈 看了十几天cocos2d x后 xff0c 也依照官网的例子写了个打飞机
  • 游戏升级之路

    七十一雾央原创 转载请注明 http blog csdn net hust xy 楼主学习编程有两年了 xff0c 决定向游戏发展大概就是半年前了 xff0c 在这里总结一下游戏方面的学习经历过 xff0c 给初学的朋友们参考下 xff0c
  • Nmap安装和使用详解

    文章目录 Nmap概述功能概述运行方式 Nmap安装Nmap参数详解目标说明主机发现端口扫描端口说明和扫描顺序服务与版本探测脚本扫描操作系统探测时间和性能防火墙 IDS规避和欺骗输出选项使用示例 常用扫描命令扫描ip地址或域名扫描整个网段扫
  • MSCKF_VIO:MSCKF的双目版本

    论文 xff1a MSCKF的双目版本 Robust Stereo Visual Inertial Odometry for Fast Autonomous Flight 下载地址 xff1a 点击 源码地址 xff1a https git
  • 功能测试,系统测试,兼容性测试,手工测试

    功能测试 功能测试一般需要根据编写的 测试用例 xff0c 执行测试用例 xff0c 执行的过程中提交缺陷 xff1b 功能测试一般至少会有两轮 xff0c 遇到比较麻烦的项目甚至会有三到四轮 xff0c 而每一轮测试都有其侧重点 xff0
  • C++ sdk 获取执行文件所在路径

    TCHAR szFilePath MAX PATH 43 1 61 0 GetModuleFileName NULL szFilePath MAX PATH tcsrchr szFilePath T 39 39 1 61 0 szFileP
  • UART串口

    一 串口的历史 首先 xff0c 串口对每一个做硬件和嵌入式软件的人来说 xff0c 就是一个必备的工具 xff0c 调试一个带MCU或者CPU的系统 我们在调试的过程中 xff0c 一般第一件事情 xff1a GPIO点灯 xff0c 第
  • C++软件工程师的发展前景如何?

    目前国内的嵌入式开发非常火 xff0c 而C 43 43 主要用于底层的嵌入式开发 驱动开发等 xff0c 也用于WINCE等嵌入式系统的应用软件开发 可以说C 43 43 软件工程师发展前景还是不错的 xff0c 下面就给大家具体介绍一下
  • 成为一名C++开发工程师,需要具备哪些条件?

    C 43 43 是C语言的继承 xff0c 它既可以进行C语言的过程化程序设计 xff0c 又可以进行以抽象数据类型为特点的基于对象的程序设计 xff0c 还可以进行以继承和多态为特点的面向对象的程序设计 C 43 43 擅长面向对象程序设
  • 一年精通,三年熟悉,五年了解,十年用过!C++真的这么难吗?

    C 43 43 有句俗话说 xff1a 一年精通 三年熟悉 五年了解 十年用过 如果可以把C 43 43 程序员分层的话 xff0c 看看你在第几层 xff1f 第0层 掌握基本的C 43 43 语法 xff0c 会写一些基本的if els
  • 【C语言实现贝塞尔曲线】无聊人士专用程序,PS钢笔工具最初原形~

    简介 动态演示贝塞尔曲线的绘制过程 支持任意点数 任意阶次 点击鼠标右键 xff0c 在鼠标位置将创建新的点 按住鼠标左键拖动控制点 空格键屏幕将清空 一起来玩一玩吧 xff01 运行效果 源码 程序名称 xff1a 贝塞尔曲线 inclu
  • c++ stream iword、pword和register_callback函数

    pword xff0c stream 的 register callback函数 include lt iostream gt include lt sstream gt using namespace std const int name
  • AWS CLI version 2 在 Windows 下的安装

    首先你需要到下面的链接地址中下载需要的应用 xff1a https awscli amazonaws com AWSCLIV2 msi 双击运行 双击运行下载的可以运行的文件 下一步继续 下一步继续安装进程 许可协议 你需要同意许可协议后继
  • MATLAB安装时为英文如何切换中文

    MATLAB安装时为英文如何切换中文 MATLAB安装问题 问题描述 2018b及以上版本的MATLAB安装时 xff0c 其中英文模式会根据电脑所在区域环境进行配置 若电脑所在区域环境不在中国 xff0c 则MATLAB初始化安装会被定义
  • VINS-Fusion-RGBD在双轮差数轮小车上配置并进行稠密建图

    VINS Fusion RGBD在小车上进行稠密建图 1 轮式里程计代替视觉里程计2 其他获得更为鲁棒性建图效果的做法3 点云地图及栅格地图的获得4 多个参数可配置 VINS Mono由于存在运动初始化过程 xff0c 对于地面小车来说运动
  • ST LINK V2.1接线图

    方便查询 xff0c 图片来源已经忘记了 xff0c 如有冒犯请通知我 特此记录以防忘记 anlog 2020年8月29日
  • ROS笔记之Gazebo机器人仿真(二)——Soildworks搭建机器人模型

    1 引言 机器人的模型是通过URDF文件进行描述 xff0c 具体说明可以参考URDF 但对于一些复杂的机器人 xff0c 通过直接编写URDF文件就比较繁琐 xff0c 这里我们介绍一种通过专业的三维建图软件Soildworks构建模型然
  • ROS笔记之Gazebo机器人仿真(四)——Rviz及Gazebo下机器人模型显示

    1 引言 上一章中我们成功导出了URDF文件 xff0c 这章中我们将学习如何在Rviz和Gazebo下显示我们创建的三维模型 2 预备 首先 xff0c 我们需要对导出的URDF文件进行下修改 xff08 1 xff09 package
  • 制作树莓派镜像img,并在其他新板上使用,实现批量克隆树莓派板

    1 将现有的系统制作成镜像img 2 配置网络 1 将现有的系统制作成镜像img 1 1 先将新买的sd卡用SDFormatter工具格式化 xff0c 以作备用 1 2 将带有系统的sd卡用Win32DiskImager exe工具Rea
  • Qt开发-Qt对象间的关系

    一 Qt对象间的关系 1 Qt对象间可以存在父子关系 xff08 1 xff09 每个对象都保存有它所有子对象的指针 xff08 2 xff09 每一个对象都有一个指向其父对象的指针 2 当指定Qt对象的父对象时 xff08 1 xff09