1. Qt中的属性属性是指窗口或控件的属性,比如opacity属性表示“透明度”,geometry指的是“位置和大小”,pos属性代表“位置”。qt中的控件有自带的属性,我们也可以自己定义属性。QObject这个类有一个函数setProperty,我们可以通过这个函数定义自己的属性,使用方法很简单,setProperty(const char * name, const QVariant & value),第一个参数是属性的名称,第二个参数是属性值。除了上面的方法,还有一种自定义属性的方法,就是在一个继承自QObject的类中使用 Q_PROPERTY 宏指令,简单用法如下: Q_PROPERTY(bool focus READ hasFocus)
Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)
Q_PROPERTY(QColor color MEMBER m_color NOTIFY colorChanged) Q_PROPERTY(参数类型 参数名称 READ 获得属性值函数 WRITE 设置属性值函数) 比如Q_PROPERTY(bool bIsDoubi READ getDoubi WRITE setDoubi ); 其中,属性类型是bool类型,bIsDoubi是属性名称。除此之外还需要写两个函数,第一个是设置属性的函数void setDoui(bool),第二个是获得属性的函数bool getDoubi()。
2. 自定义属性有什么作用1)改变样式翻开Qt助手,找到样式表语法部分,在通过选择器设置样式中有一个属性选择器,比如QPushButton[flat=“false”]意思就是当按钮属性flat为false时的样式。 举个栗子,我们有个QWidget类,名字叫PropertyTest,界面中有一个按钮叫pushButton #pushButton{border:4px solid blue;}
PropertyTest[borderColor="red"] #pushButton{border:4px solid red;}
PropertyTest[borderColor="green"] #pushButton{border:4px solid green;}
PropertyTest[borderColor="blue"] #pushButton{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的样式。 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部分。 在Qt文档中有个提醒,在使用属性选择器时,如果之前控件有其它样式,那么需要重写设置一下,“旧的不去,新的不来”,通过unpolish和polish抹去旧的样式,涂上新的样式。 2)动画中使用自定义属性m_pOpacityEffect = new QGraphicsOpacityEffect(this);
m_pOpacityEffect->setOpacity(1);
this->setGraphicsEffect(m_pOpacityEffect);
Q_PROPERTY(qreal buttonOpacity READ buttonOpacity WRITE setBtnOpacity) 上面的写法可能不太好,因为qreal精度与机器有关,最好用double或float。 定义属性时,在函数setBtnOpacity中改变QGraphicsOpacityEffect对象,来调整透明度。 好了,现在我们将动画属性名称设置为buttonOpacity—— QPropertyAnimation::setPropertyName(“buttonOpacity”) ,就能通过动画改变按钮的透明度了。
|