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

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 多次是不安全的。

相关文章:

  • Excel ScriptLab学习笔记
  • Linux驱动编程 - Framebuffer子系统
  • 2025-03-16 学习记录--C/C++-PTA 练习4-7 求e的近似值
  • RabbitMQ(补档)
  • 设计模式-组件协作
  • 《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(57)乾坤尺量会议室 - 会议室安排(贪心排序)
  • 麒麟服务器操作系统Node.js环境部署手册
  • 3.16-线程同步
  • Excel(函数篇):COUNTIF与CONUTIFS函数、SUMIF与SUMIFS函数、ROUND函数、MATCH与INDEX函数、混合引用与条件格式
  • ollama注册自定义模型(safetensors)
  • 基于大模型的分泌性中耳炎全流程预测与治疗管理研究报告
  • 【C++】一文吃透STL容器——list
  • Linux内核实时机制30 - 实时优化方案 - 实时与非实时争抢
  • 谷歌开源多模态大模型 Gemma 3:轻量级与高性能的完美融合
  • 【经验】Orin系列Ubuntu远程桌面:VNC、NoMachine、URDC
  • Java EE(11)——文件I(input)/O(output)
  • 有效的山脉数组 力扣941
  • 使用GoldenGate完成SQLserver到Oracle的数据实时同步
  • C语言之 条件编译和预处理指令
  • 数据结构-树(详解)
  • 高进华“控股”后首份年报出炉,史丹利账上可动资金大幅缩水
  • 外交部:应美方请求举行贸易代表会谈,中方反对美滥施关税立场没有变化
  • 新疆生产建设兵团草湖项目区副主任宋全伟接受审查调查
  • 金融监管总局将推出8项增量政策:涉房地产金融、险资入市、稳外贸等
  • 李云泽:大型保险集团资本补充已经提上日程
  • 马上评|独生子女奖励不能“私了”,政府诚信是第一诚信