Qt之自定义属性Q_PROPERTY
来源:互联网 发布:嵌入式组态软件 编辑:程序博客网 时间:2024/05/16 15:51
QT提供了一个成熟的属性系统,但是作为一个跨平台的且与编译器无关的库,qt不依赖于非标准的编译器功能例如 __property or [property];
1.必须有一个read函数。它用来读取属性值。因此用Const限定。它的返回值类型必须为属性类型或者属性类型的引用或者指针。不能是其他类型例如:QWidget::hasFocus().
2.有一个可选的write函数。它用来设置属性值,它的返回值必须为void型,而起必须要含有一个参数。例如:QWidget::setEnabled()
3.一个reset函数能够把property设置成其默认状态,它也是可选的。复位功能必须返回void,并且不带参数,
4.一个NOTIFY信号是可选的 。如果定义,它提供了一个信号这个信号在值发生改变时会自动被触发。
5.如果定义了"STODE"属性表明这是一直存在的。QWidget::minimumSize() 6.一个"DESIGNABLE"属性表明该property能在GUI builder(一般为Qt Designer)可见
7.USER 属性 表面是否可以被用户所编辑
8 CONST设定属性是不可修改的 所以不能跟WRITE或者NOTIFY同时出现
9 FINAL表明该属性不会被派生类中重写
QT的强大之处在于它可以支持任何标准的c++编译器。 QT是基于 Meta-Object System(元对象)和signals and slots(信号槽)的。
Q_PROPERTY
Q_PROPERTY()是一个宏,用来在一个类中声明一个属性property,由于该宏是qt特有的,需要用moc进行编译,故必须继承于QObject类。
Q_PROPERTY(type name READ getFunction [WRITE setFunction] [RESET resetFunction] [NOTIFY notifySignal] [DESIGNABLE bool] [SCRIPTABLE bool] [STORED bool] [USER bool] [CONSTANT] [FINAL])可能还不太好理解 不过下面介绍几个特殊的例子你就豁然开朗了。
Q_PROPERTY(bool focus READ hasFocus) Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled) Q_PROPERTY(QString title READ title WRITE setTitle USER true)
1.必须有一个read函数。它用来读取属性值。因此用Const限定。它的返回值类型必须为属性类型或者属性类型的引用或者指针。不能是其他类型例如:QWidget::hasFocus().
2.有一个可选的write函数。它用来设置属性值,它的返回值必须为void型,而起必须要含有一个参数。例如:QWidget::setEnabled()
3.一个reset函数能够把property设置成其默认状态,它也是可选的。复位功能必须返回void,并且不带参数,
4.一个NOTIFY信号是可选的 。如果定义,它提供了一个信号这个信号在值发生改变时会自动被触发。
5.如果定义了"STODE"属性表明这是一直存在的。QWidget::minimumSize() 6.一个"DESIGNABLE"属性表明该property能在GUI builder(一般为Qt Designer)可见
7.USER 属性 表面是否可以被用户所编辑
8 CONST设定属性是不可修改的 所以不能跟WRITE或者NOTIFY同时出现
9 FINAL表明该属性不会被派生类中重写
然后对照这些,自己写了一个例子:
class Test : public QObject {Q_OBJECTQ_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)public:Test(QObject *parent = 0) : QObject(parent) {}virtual ~Test(){}void setEnabled(bool e) { enabled = e; }bool isEnabled() const { return enabled; }private:bool enabled;};然后在主函数中添加:
Test *test = new Test;test->setProperty("enabled", true);//test->setEnabled(true); //ok also workif(test->property("enabled").toBool()) .....
如果你不用QML,不用QtScript,不用于创建Designer插件,不使用QItemDelegate,不使用ActiveQt,不使用...... 的话,那么Q_PROPERTY确实没用。
3 0
- Qt之自定义属性Q_PROPERTY
- Qt之自定义属性Q_PROPERTY
- Qt之QSS(Q_PROPERTY-自定义属性)
- Qt之QSS(Q_PROPERTY-自定义属性)
- Qt之QSS(Q_PROPERTY-自定义属性)【转】
- Qt之QSS(Q_PROPERTY-原始属性)
- qt之Q_PROPERTY
- Qt之QSS(Q_PROPERTY-原始属性)【转】
- Qt之Q_PROPERTY宏定义
- Qt 自定义控件应用QSS(setStyleSheet)设置由Q_PROPERTY设置的属性
- Qt-Q_PROPERTY
- Qt之Q_PROPERTY宏定义二
- Qt中Q_PROPERTY定义属性以及属性的使用
- 用Q_PROPERTY增加Qt现有类的属性和方法
- QT Q_PROPERTY宏介绍
- Qt中Q_PROPERTY
- QT中的Q_PROPERTY()宏
- Qt中 Q_PROPERTY 的使用
- beego 如何自定error
- Java中只有按值传递,没有按引用传递!
- BLOB大字段&DBLINK
- Perl6 -1.3 子例程1
- Oracle日期时间(Date/Time)操作
- Qt之自定义属性Q_PROPERTY
- IBM WebSphere MQ发送消息和接收消息
- iOS中nil和release 的区别
- 设计模式C++实现--单例模式
- java 内部类
- 字符串操作-正则表达式
- iOS9 中的网络请求适配(http请求的允许)
- 3D触控简介:建立数字刻度应用及快速活动栏
- 一张图告诉你,只会这些HTML还远远不够!!!!!