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

QT:动态属性和对象树

动态对象

1.添加Q_PROPERTY对象

#ifndef MYPROPERTYCLASS_H
#define MYPROPERTYCLASS_H

#include <QObject>

class MyPropertyClass : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString mask READ mask WRITE setMask NOTIFY maskChanged)
public:
    explicit MyPropertyClass(QObject *parent = nullptr);
    QString mask()const;
    void setMask(QString strMaskNum);
signals:
    void maskChanged(QString str);
public slots:

private:
    QString m_mask;
};

#endif // MYPROPERTYCLASS_H

2.动态属性可以用Q_OBJECT来指向Q_PROPERTY,这样在实际开发中,如果遇到别人写的对象我们又不想了解他的太多内容,只需要知道对象类名就可以直接进行数据的提取。

    MyPropertyClass * mypc = new MyPropertyClass;
    MyPropertyClass *mypc2 = new MyPropertyClass;
    connect(mypc,SIGNAL(maskChanged(QString)),this,SLOT(maskChanged(QString)));
    mypc->setMask("10000亿个口罩");
    qDebug()<<mypc->mask();

    QObject *obj = mypc;
    qDebug()<<"obj第一次进行属性的读取:"<<obj->property("mask").toString();

    obj->setProperty("mask","20000个口罩");
    qDebug()<<"obj第二次进行属性的读取:"<<obj->property("mask").toString();

    qDebug()<<"mypc2读取数据:"<<mypc2->mask();

注意因为元对象属性是静态的,内存中只有一份mypc指向了这个内存,意味着mypc2就不能读取到20000个口罩这个数据

对象树

Qt 提供了对象树机制,能够自动、有效的组织和管理继承自 QObject 的 Qt 对象。每个继承自 QObject 类的对象通过它的对象链表(QObjectList)来管理子类对象,当 用 户 创 建 一 个 子 对 象 时 , 其 对 象 链 表 相 应 更 新 子 类 对 象 信 息 , 对 象 链 表 可 通过children()获取。当父对象析构的时候,其对象链表中的所有(子)对象也会被析构,父对象会自动将其从父对象列表中删除。Qt 保证没有对象会被 delete 两次。开发中手动回收资源时建议使用deleteLater 代替 delete,因 deleteLater 多次是安全的,而 delete 多次是不安全的。


http://www.kler.cn/a/590405.html

相关文章:

  • Compose笔记(九)--Checkbox
  • [数据结构]排序之 快速排序详解(递归版非递归版)
  • 游戏引擎学习第162天
  • 2025年高职大数据可视化实训室建设及实训平台整体解决方案
  • Vue秘籍:如何动态修改页面 Title(浏览器页签名称)?
  • idea cpu干到100%的解决方法?
  • HarmonyOS NEXT开发实战——HUAWEI DevEco Studio 开发指南
  • 车载以太网测试-13【网络层-IGMP协议】
  • 【Godot】Viewpoint
  • mapbox基础,使用线类型geojson加载symbol符号图层,用于标注文字
  • 解锁智慧养老新可能,全面提升养老生活质量
  • Go语言中的错误处理与异常恢复:性能对比与实践思考
  • 【leetcode】51.N皇后
  • 如何检查CMS建站系统的插件是否安全?
  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(60)五火七禽扇灭火 - 接雨水(双指针与动态规划)
  • Kubernetes Network Policy使用场景
  • 微软远程桌面即将下架?Splashtop:更稳、更快、更安全的 RDP 替代方案
  • Django 5实用指南(十四)项目部署与性能优化【完】
  • 调用华为云API实现口罩识别
  • 从以太网 II 到 VLAN 和 Jumbo Frame:数据帧格式解读