Qt通用属性工具:随心定义,随时可见(二)

news2025/2/4 6:54:56

一、话接上篇

本片咱们话接上篇《Qt通用属性工具:随心定义,随时可见(一)》,讲讲自定义的对象属性如何绑定通用属性编辑工具。

二、破杯二两酒

1、一颗小花生

同样,我们先准备一个比较简单的demo,先看看效果。
在这里插入图片描述
这里我们自定义了一个Student 类型,为它咱们定义了三个属性,
id : 只读。在上图的演示中,我们也可以看到,我尝试对id进行修改,实际并没有生效。这里实际可以进一步优化通用属性编辑器,当只读属性时,直接灰显,不允许修改可能更好(后续优化)
name : 可读、可写,当name发生变化时,我们还让他发出一个nameChanged的信号。从上图我们修改名字,对应绑定的槽函数的打印输出信息可以看到。喔嚯,MVC,真是爽歪歪。
age : 可读可写。修改值,自然也可以生效

2、一碟花生米

#include "widget.h"
#include <QApplication>
#include <QObject>
#include "QtPropertyEditor.h"
#include <QHBoxLayout>
#include <QDebug>

class Student : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString id READ id)
    Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
    Q_PROPERTY(int age READ age WRITE setAge)
public:
    Student():_id("xxoo"){}
    Student(const QString id) : _id(id){}
    Student(const QString id,const QString name)
        : _id(id),_name(name){}
    Student(const QString id,const QString name,const int age)
        : _id(id),_name(name),_age(age){}

    Student(const Student& that){
        this->_name = that.name();
        this->_age = that.age();
    }

    const QString id() const { return _id;}

    const QString name() const {return _name;}
    void setName(const QString& name){ _name = name; nameChanged(name);}
    void setName(const QString&& name){_name = name;}

    const int age() const { return _age;}
    void setAge(const int& age){ _age = age;}
    void setAge(const int&& age){ _age = age;}
signals:
    void nameChanged(QString name);

private:
    const QString _id;
    QString _name;
    int _age;
};
Q_DECLARE_METATYPE(Student)


class StudentList: public QObject
{
    Q_OBJECT
    Q_PROPERTY(QList<Student> students READ students WRITE setStudents)
    Q_PROPERTY(QString desc READ desc WRITE setDesc)
public:
    StudentList(){}
    StudentList(const QList<Student> lstu ):_students(lstu){}
    StudentList(const StudentList& that){
        this->_students = that.students();
    }

    const QList<Student> students() const { return _students;}
    void setStudents(const  QList<Student>& lstu){ _students = lstu;}
    void setStudents(const  QList<Student>&& lstu){ _students = lstu;}

    const QString desc() const { return _desc;}
    void setDesc(const QString& desc ){ _desc = desc;}
    void setDesc(const QString && desc){ _desc = desc;}

private:
    QList<Student> _students;
    QString _desc;
};
Q_DECLARE_METATYPE(StudentList)

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

    qRegisterMetaType<Student>("Student");
    qRegisterMetaType<StudentList>("StudentList");

    // Ojbect
    Student stu0("1001","zhaolei",22);
    stu0.setObjectName(QStringLiteral("学生0"));

    Student stu1("1002","cangjingkong",18); // 苍老师用永远18,没人能有意见吧
    stu1.setObjectName(QStringLiteral("学生1"));

    QList<Student> l;
    l.append(stu0);
    l.append(stu1);

    StudentList lstu(l);
    lstu.setDesc(QStringLiteral("三年一班学生信息"));

    for(const auto& stu : lstu.students()){
        QObject::connect(&stu,&Student::nameChanged,[](QString name){
            qDebug() << __FUNCTION__ << __LINE__ << "  namechanged : " << name;
        });
    }


    // UI bind Object
    QtPropertyEditor::QtPropertyTreeEditor tree_editor;
    tree_editor.treeModel.setMaxDepth(4);
    tree_editor.treeModel.propertyNames = QtPropertyEditor::getPropertyNames(&lstu);
    tree_editor.treeModel.setObject(&lstu);
    tree_editor.resizeColumnsToContents();
    tree_editor.show();

    return a.exec();
}

#include "main.moc"

在这里插入图片描述
这里属性节点名称有显示,可惜不如我所愿,关于list节点却没有将子节点一一展开,这是此通用属性编辑器需要进一步优化的issue,敬请期待续集吧~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1328564.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

案例系列:营销模型_客户细分_无监督聚类

案例系列&#xff1a;营销模型_客户细分_无监督聚类 import numpy as np # 线性代数库 import pandas as pd # 数据处理库&#xff0c;CSV文件的输入输出&#xff08;例如pd.read_csv&#xff09;/kaggle/input/customer-personality-analysis/marketing_campaign.csv在这个项…

老师的责任和义务

作为一名老师&#xff0c;我们的责任和义务是重大的。在教育领域&#xff0c;我们扮演着至关重要的角色&#xff0c;肩负着培养下一代人才的重任。下面&#xff0c;我将以知乎的口吻&#xff0c;从几个方面谈谈老师的责任和义务。 确保学生获得高质量的教育。这包括制定合理的教…

企业级低代码平台:助力IT部门,释放业务创新力

随着低代码技术的升级&#xff0c;越来越多的企业开始采用低代码平台&#xff0c;如恒逸集团利用低代码平台快速搭建了综合业务管理平台&#xff0c;时间比传统开发缩短近一倍。云表低代码提供的数据、流程、权限、图表等引擎工具&#xff0c;完美适配企业数字化需求。根据Gart…

HarmonyOS应用事件打点开发指导

简介 传统的日志系统里汇聚了整个设备上所有程序运行的过程流水日志&#xff0c;难以识别其中的关键信息。因此&#xff0c;应用开发者需要一种数据打点机制&#xff0c;用来评估如访问数、日活、用户操作习惯以及影响用户使用的关键因素等关键信息。 HiAppEvent 是在系统层面…

《每天一分钟学习C语言·六》

1、 1字节&#xff08;Byte&#xff09;8位&#xff0c;1KB1024字节&#xff0c;1M1024KB&#xff0c;1G1024MB 2、 char ch A; printf(“ch %d\n”, ch);ch为65 这里是ASCII码转换 3、 scanf("%d", &i); //一般scanf直接加输入控制符 scanf("m%d&qu…

飞天使-k8s知识点4-验证安装好后功能

文章目录 接k8s知识点2之验证集群功能创建dashboard验证安装nginx 并访问tomcat 访问 接k8s知识点2之验证集群功能 [rootkubeadm-master2 tmp]# kubectl run net-test1 --imagealpine sleep 36000 pod/net-test1 created [rootkubeadm-master2 tmp]# kubectl get pod NAME …

SQLiteStudio安装指南

本博文源于笔者想要打开sqlite3的db文件&#xff0c;于是下载了SQLiteStudio&#xff0c;下载了它&#xff0c;sqlite3的文件随便查看&#xff0c;这里从零开始安装 文章目录 1、搜索官网网址2、开始下载3、开始安装4、开始使用5、总结 1、搜索官网网址 官网地址&#xff1a;…

说说 style gan 中的感知路径长度(Perceptual Path Length)

我在之前的博库中介绍了 style gan 的基本原理&#xff0c;原文中有提出感知路径长度&#xff08;Perceptual Path Length&#xff09;的概念。这是一种评价生成器质量的方式。 PPL基本思想&#xff1a;给出两个随机噪声 z 1 , z 2 ​ &#xff0c;为求得两点的感知路径长度PPL…

【数据结构和算法】最大连续1的个数 III

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 方法一&#xff1a;滑动窗口 2.2 滑动窗口解题模板 三、代码 3.1 方法一&#xff1a;滑动窗口 四、…

一些问题/技巧的集合(仅个人使用)

目录 第一章、1.1&#xff09;前端找不到图片1.2&#xff09;1.3&#xff09;1.4&#xff09; 第二章、2.1&#xff09;2.2&#xff09;2.3&#xff09; 第三章、3.1&#xff09;3.2&#xff09;3.3&#xff09; 第四章、4.1&#xff09;4.2&#xff09;4.3&#xff09; 友情提…

依托亚马逊云科技构建韧性应用

背景 现代业务系统受到越来越多的韧性相关的挑战&#xff0c;特别是客户要求他们的业务系统 724 不间断的运行。因此&#xff0c;韧性对于云的基础设施和应用系统有着至关重要的作用。 亚马逊云科技把韧性视为一项最基本的工作&#xff0c;为了让我们的业务系统能持续优雅地提供…

企业风控报告中工商和司法数据

在中小企业的大数据风控体系中&#xff0c;工商数据与司法数据是最基础且常见的两类信息维度&#xff0c;它们在企业大数据体系中发挥着举足轻重的作用。这些数据大部分都是社会公开信息&#xff0c;因此在行业市场中易于获取。企业可以通过国家或地方的相关工商司法公共服务系…

幻彩LED灯带芯片:SM16703SP单点单控 断点续传

幻彩LED灯带芯片SM16703SP3是一款单点单控断点续传的芯片&#xff0c;它采用了先进的技术&#xff0c;可以实现灯光的变化和控制。这款芯片不仅仅可以提供各种丰富多彩的灯光效果&#xff0c;还有断点续传功能&#xff0c; LED断点续传灯条采用了双信号线交叉传输的方案&#x…

SpringBoot中maven的parent标签的来源与详解

1、基本使用 场景一&#xff1a;有两个项目A、B、C&#xff0c;都依赖同一个jar包&#xff1a;lombok.jar。 若分别在各自的项目中引入lombok.jar的依赖&#xff0c;那么当lombok.jar的版本发生变化时&#xff0c;三个项目pom文件的都需要改。 此时就可以使用parent标签。首先…

docker搭建mysql8.0.32,实现主从复制(一主两从)

安装docker的步骤、使用命令就不写了&#xff0c;本文章是基于会使用docker、linux基本命令的基础上来写的。 开始步骤&#xff1a; 1. 拉取 mysql 镜像 docker pull mysql:8.0.32 2. 启动容器并运行mysql a. 准备mysql的配置文件&#xff08;该配置文件是&#xff1a;mysq…

Certum多域名dv证书保护几个域名

多域名SSL证书是一种用于保护多个域名的SSL证书&#xff0c;适用范围非常广泛&#xff0c;比如&#xff0c;个人或者企事业单位可能管理多个子域名或主域名&#xff0c;这些域名都受同一个多域名SSL证书的保护&#xff0c;而不是为每个域名单独申请SSL证书。今天就随SSL盾小编了…

美好蕴育润康,专业营养包,母婴健康的首选

随着社会的进步和人们生活水平的提高&#xff0c;母婴健康越来越受到人们的关注。为了保障母婴健康&#xff0c;许多准妈妈和妈妈们都在寻找一种科学、有效的营养补充品。而美好蕴育润康正是这样一款专业营养包&#xff0c;它根据金字塔营养组方&#xff0c;从备孕、怀孕、产后…

状态管理之复杂对象

前面我们学习的State、Prop、Link、Provide、Consume这些装饰器都只能更新对象的直接赋值、对象属性赋值&#xff1b;如果对象的属性又是一个对象&#xff0c;也就是嵌套对象&#xff0c;那么对嵌套对象的属性的更新是不会被观察到的&#xff0c;所以复杂状态管理用于解决该问题…

《A++ 敏捷开发》-1 如何改善

1 如何改善 敏捷开发过程改进案例 5月 A公司一直专门为某电信公司提供针对客服、线上播放等服务。 张工是公司的中层管理者&#xff0c;管理好几个开发团队&#xff0c;有5位项目经理向他汇报。 他听说老同学的团队都开始用敏捷开发&#xff0c;很感兴趣&#xff0c;便参加了…

15个热门的开源数据可视化项目

数据可视化(即 BI仪表盘)是图形表示的数据。它涉及产生将表示的数据之间的关系传达给图像查看者的图像。这种通信是通过在可视化过程中使用图形标记和数据值之间的系统映射来实现的。该映射建立了如何在视觉上表示数据值,确定图形标记的属性(例如大小或颜色)如何以及在多大程…