Qt文档阅读笔记-Q_PROPERTY解析及实例
发布日期:2021-06-30 10:56:39
浏览次数:2
分类:技术文章
本文共 2568 字,大约阅读时间需要 8 分钟。
目录
官方解析
这个宏用于继承于QObject的类声明属性。这样声明后的属性行为与类数据成员一样,但是他们可以通过元对象系统进行访问。
Q_PROPERTY(type name (READ getFunction [WRITE setFunction] | MEMBER memberName [(READ getFunction | WRITE setFunction)]) [RESET resetFunction] [NOTIFY notifySignal] [REVISION int] [DESIGNABLE bool] [SCRIPTABLE bool] [STORED bool] [USER bool] [CONSTANT] [FINAL])
这个属性需要属性名,以为返回值类型,以及READ函数。返回值类型只要是QVariant支持的都阔以(这里要特别注意Q_DECLARE_METATYPE声明的类型也是可以用的),还有几个属性是可选的,但是写一个WRITE函数是很常见的。其他的属性处理USER是false外其他都为true。
Q_PROPERTY(QString title READ title WRITE setTitle USER true)
关于这个宏的更读信息,以及这个宏的详细使用要看Qt's Property System这篇文档。
博主栗子
运行截图如下:
myclass.h
#ifndef MYCLASS_H#define MYCLASS_H#includeclass MyClass : public QObject{ Q_OBJECT Q_PROPERTY(Priority priority READ priority WRITE setPriority NOTIFY priorityChanged)public: explicit MyClass(QObject *parent = 0); enum Priority{One,Two,Three}; Q_ENUM(Priority) void setPriority(Priority priority); Priority priority()const;public slots: void prioritySLOT(Priority priority);signals: void priorityChanged(Priority);private: Priority m_priority;};#endif // MYCLASS_H
main.cpp
#include "myclass.h"#include#include #include #include #include int main(int argc, char *argv[]){ QApplication a(argc, argv); MyClass *myinstance=new MyClass; QObject *object=myinstance; object->setProperty("priority","Two"); //myinstance->setPriority(MyClass::Two); Method 2 //change value myinstance->setPriority(MyClass::Three); const QMetaObject *metaobject=object->metaObject(); for(int i=0;i propertyCount();i++){ QMetaProperty metaproperty=metaobject->property(i); qDebug()< property(metaproperty.name()); } return a.exec();}
myclass.cpp
#include "myclass.h"#includeMyClass::MyClass(QObject *parent) : QObject(parent){ connect(this,SIGNAL(priorityChanged(Priority)),this,SLOT(prioritySLOT(Priority)));}void MyClass::setPriority(Priority priority){ m_priority=priority; emit priorityChanged(priority);}MyClass::Priority MyClass::priority() const{ return m_priority;}void MyClass::prioritySLOT(MyClass::Priority priority){ qDebug()<<"prioritySLOT called! The priority value is "<
运行截图如下:
当去掉
Q_PROPERTY(Priority priority READ priority WRITE setPriority NOTIFY priorityChanged)
后运行截图如下:
这里可以看到元对象属性里面没有他了,
关于为什么一开始就会有个QString,类型的属性,并且名字为objectname,将会在另外一篇博文中给出
转载地址:https://it1995.blog.csdn.net/article/details/82768121 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年04月05日 19时04分17秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
libuv实现tcp代理服务器
2019-04-30
libuv使用不当导致的内存泄漏
2019-04-30
libuv实现ping包发送和接收
2019-04-30
linux-arm编译报错m4: unrecognized option ‘--gnu‘
2019-04-30
基础架构系列篇-系统CENTOS7安装jdk8
2019-04-30
基础架构系列篇-CENTOS7安装NGINX
2019-04-30
系统运维篇-常用的LINUX指令小计
2019-04-30
基础架构系列篇-系统centos7中安装mysql8.0.23(已更新)
2019-04-30
基础架构系列篇-系统centos7中DOCKER安装REDIS(已更新)
2019-04-30
基础架构系列篇-系统centos7安装docker+COMPOSE
2019-04-30
基础架构系列篇-系统centos7中docker安装rabbitmq
2019-04-30
基础架构系列篇-NGINX部署VUE
2019-04-30
个人电商项目,基于uni-app+ springcloud +VUE技术
2019-04-30
基础架构系列篇-系统centos7安装kafka
2019-04-30
基础架构系列篇-系统centos7中docker安装分布式文件存储服务minio
2019-04-30
知识点记录-java判断系统是linux或windows
2019-04-30
知识点记录-springboot静态资源映射路径
2019-04-30
知识点记录-vue-cli+webpack打包运行图标显示异常
2019-04-30
知识点记录-springboot2.1集成rabbitmq
2019-04-30
微服务springcloud2系列篇-配置与注册nacos组件
2019-04-30