使用:
Qt 拥有一个属性系统。我经常在QSS中使用
QWidget#SWNotifyMsgDialog QLabel#label_sure[status="normal"]
配合在代码中使用
ui.label_sure->setProperty("status","warning");
函数原型:bool QObject:setProperty(const char *name,const QVariant &value)
设置label的QSS样式。以上其实就是Qt属性系统的一种使用方式。
具体了解:
但是,Qt 属性系统从 setProperty() 这个函数就可以看出,其类似一个 key-value 的键值对。
并且,setProperty() 可以配置 property() 来使用。前一个是设置属性,后一个是获取属性。
ui.label_sure->property("status").toString();
函数原型:QVariant QObject::property(const char *name)const
通过设置属性和获取属性可以增强编码的便捷性。
举个例子:我通过设置 “status” 属性,获取当前某控件的状态。至少节省了一个变量,两中状态的设置。
自定义控件
如果我想要更改QLineEdit控件里闪烁插入光标的颜色与样式,原本默认不支持该设置,只能使用自定义控件,将光标和绘制上去。并且,我希望我可以使用 qss 样式来控制。
使用 Q_PROPERTY 宏,就可以达到目的。
class CodeLineEdit : public QLineEdit
{
QOBJECT
QPROPERTY(QColor caretColor READ caretColor WRITE setCaretColor DESIGNABLE true)
Q_PROPERTY(int caretwidth READ caretwidth WRITE setCaretwidth DESIGNABLE true)
}
括号中依次是:类型,变量名,READ,读这个值的函数名(一般就是变量名),WRITE,写这个值的函数名(一般是set+变量名)。后面的可以省略。
- 有了这个 Q_PROPERTY 宏,就可以也就可以使用 setProperty() 来设置这个值。
- 还可以在 Qt Designer 中的属性编辑器中使用。点击图标可以创建动态属性
属性名称与类型,必须与定义的一致。
之后在属性编辑器中就会出现
使用这个,就与上面的默认属性是一样的。
3)还可以在QSS中使用 qproperty- 来添加样式。