标签:
属性是指窗口或控件的属性,比如opacity属性表示“透明度”,geometry指的是“位置和大小”,pos属性代表“位置”。qt中的控件有自带的属性,我们也可以自己定义属性。
QObject这个类有一个函数setProperty,我们可以通过这个函数定义自己的属性,使用方法很简单,setProperty(const char * name, const QVariant & value),第一个参数是属性的名称,第二个参数是属性值。
除了上面的方法,还有一种自定义属性的方法,就是使用Q_PROPERTY这个宏,简单用法如下:
Q_PROPERTY(type name READ getFunction WRITE setFunction)
Q_PROPERTY(参数类型 参数名称 READ 获得属性值函数 WRITE 设置属性值函数)
比如Q_PROPERTY(bool bIsDoubi READ getDoubi WRITE setDoubi),属性类型是bool类型,bIsDoubi是属性名称。除此之外还需要写两个函数,第一个是设置属性的函数void setDoui(bool),第二个是获得属性的函数bool getDoubi()。
我目前所知的自定义属性有两个用途,第一是用于改变样式,第二是用于动画,下面分别作解释。
翻开Qt助手,找到样式表语法部分,在通过选择器设置样式中有一个属性选择器,比如QPushButton[flat="false"]意思就是当按钮属性flat为false时的样式。
举个栗子,我们有个类,名字叫PropertyTest,在界面中有个按钮,名字叫pushButton_3
#pushButton_3{border:4px solid blue;} PropertyTest[borderColor="red"] #pushButton_3{border:4px solid red;} PropertyTest[borderColor="green"] #pushButton_3{border:4px solid green;} PropertyTest[borderColor="blue"] #pushButton_3{border:4px solid blue;}
上面的样式意思是,按钮默认样式是blue蓝色,通过改变类PropertyTest的属性borderColor值改变按钮的颜色。
在代码中,首先定义属性
Q_PROPERTY(QString borderColor READ getBorderColor WRITE setBorderColor)
使用一个成员变量保存属性的值,并通过set和get函数分别设置和获得该值。
private: QString m_strBorderColor; private: void setBorderColor(const QString &strBorderColor){ m_strBorderColor = strBorderColor; } QString getBorderColor(){ return m_strBorderColor; }
单击按钮pushButton改变属性值,从而改变按钮pushButton_3的样式。
void PropertyTest::changeBorderColor() { if (m_iTest % 3 == 0) { setBorderColor("red"); } else if (m_iTest % 3 == 1) { setBorderColor("green"); } else { setBorderColor("blue"); } style()->unpolish(ui.pushButton_3); style()->polish(ui.pushButton_3); update(); m_iTest++; }
最后要注意的是,上面代码中的unpolish和polish部分。
如果我们想要用一个动画改变按钮的透明度,
标签:
原文地址:http://www.cnblogs.com/hellovenus/p/5582521.html