当前位置:网站首页>[Qt]属性
[Qt]属性
2022-07-26 22:37:00 【Sy++】
属性的定义
通过宏Q_PROPERTY定义属性,属性就是提供一种访问数据成员的方式,像是getName(),setName()这种函数,格式:
Q_PROPERTY(
type name 关键字 函数/变量
)主要的关键字:
- READ:指定一个读取属性值的函数,没有MEMBER时必须设置READ
- WRITE:指定一个写属性值的函数,只读属性没有WRITE设置
- MEMBER:指定一个成员变量与属性关联,成为可读可写的属性,无需再设置READ和WRITE。
- RESET:可选,指定一个设置属性的缺省值的函数
- NOTIFY:可选,用于设置一个信号,当属性值变化时发射此信号。
- DESIGNABLE:表示属性是否在Qt Designer里可见,缺省为true。
- CONSTANT:表示属性值是一个常数,对于一个对象实例,READ指定的函数返回值是常数,但是每个实例的返回值可以不一样。具有CONSTANT关键字的属性不能有WRITE和NOTIFY关键字。
- FINAL:表示所定义的属性不能被子类重载。
例:
Q_PROPERTY(
QString name MEMBER t_name
)
Q_PROPERTY(
int score READ getScore WRITE setScore
)
Q_PROPERTY(
QString sex READ getSex WRITE setSex
)属性的使用
只需知道属性名称,通过setProperty()就可设置属性值,property()就可获取属性值,例:
QPerson.h
...
Q_PROPERTY(
int age READ age WRITE setAge NOTIFY ageChanged
)
Q_PROPERTY(
QString name MEMBER m_name
)
Q_PROPERTY(
int score MEMBER m_score
)
...
QWeight.h
...
#include "QPerson.h"
private:
QPerson* boy;
...
QWeight.cpp
...
boy = new QPerson("王小明");
boy->setProperty("score", 95);
boy->setProperty("age", 10);
boy->setProperty("sex", "Boy"); //动态属性
QString hisName = aPerson->property("name").toString(); //输出"王小明"
...动态属性
在运行时为类定义的新属性,就是动态属性,例如:
boy->setProperty("sex", "Boy"); //动态属性类的附加信息
宏Q_CLASSINFO(),可以为类的元对象定义“名称——值”信息,例如:
QPerson.h
...
Q_CLASSINFO("author", "wang")
Q_CLASSINFO("company", "UPC")
Q_CLASSINFO("version", "1.0.0")
...
添加类信息后,可以通过元对象的一些函数来获取类的附加信息,如classInfo(int)来获取某个附加信息,函数原型:
QMetaClassInfo QMetaObject::classInfo(int index) const返回值是QMetaClassInfo类型,它有name()和value()两个函数,可以通过这两个函数来获取附加信息的名称和值。
属性在工程中的使用步骤

对应代码:
const QMetaObject* meta = boy->metaObject();
for (int i = meta->propertyOffset(); i < meta->propertyCount(); i++)
{
QMetaProperty prop = meta->property(i);
const char* propName = prop.name();
QString propValue = boy->property(propName).toString();
ui.textEdit->append(
QString("属性名称=%1,属性值=%2").arg(propName).arg(propValue)
);
}边栏推荐
- Typesript generic constraint
- Drawing warehouse-2 (function image)
- Abstract classes and interfaces (sorting out some knowledge points)
- Chapter 7 course summary
- Database: MySQL foundation +crud basic operation
- Nacos installation and pit stepping
- Web middleware log analysis script 1.0 (shell script)
- 13_集成学习和随机森林(Ensemble Learning and Random Forests)
- 2022-07-17:1, 2, 3... N-1, N, n+1, n+2... In this sequence, only one number has repetition (n). This sequence is unordered. Find the repeated number n. This sequence is ordered. Find the repeated numb
- Drawing warehouse Tsai
猜你喜欢

CSDN article syntax rules

Resolve Microsoft 365 and Visio conflicts

Ubantu installing Oracle JDK

机器人学台大林教授课程笔记

Knowledge distillation -- pytorch implementation

蒙着头配置deeplabcut 1

9_ Logistic regression

Go exceed API source code reading (IV) -- save (), SaveAs (name string)

Deep learning of parameter adjustment skills

The crawler parses the object of the web page. Element name method
随机推荐
生成yolov5.wts文件出错
Halloween treatments (drawer principle)
放图仓库-2(函数图像)
MySQL数据库复杂操作:数据库约束,查询/连接表操作
Relationship between Unicode and UTF-8
CSDN文章语法规则
Typesript generic constraint
torch.相关函数
4-4 object lifecycle
9_ Logistic regression
Class and object notes I
Deeplabcut uses 1
Drawing warehouse Tsai
Design of electronic scale based on 51 single chip microcomputer
Lt9611ux Mipi to HDMI 2.0 dual port with audio
今日份20220719折腾deeplabcut
Leetcode - hash table
12_ Decision tree
爬虫解析网页的 对象.元素名方法
C and pointer Chapter 18 runtime environment 18.1 judgment of runtime environment