Bootstrap

【Qt记录】属性 Q_PROPERTY

使用:

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+变量名)。后面的可以省略。

  1. 有了这个 Q_PROPERTY 宏,就可以也就可以使用 setProperty() 来设置这个值。
  2. 还可以在 Qt Designer 中的属性编辑器中使用。点击图标可以创建动态属性
    在这里插入图片描述
    属性名称与类型,必须与定义的一致。
    在这里插入图片描述
    之后在属性编辑器中就会出现
    请添加图片描述
    使用这个,就与上面的默认属性是一样的。
    3)还可以在QSS中使用 qproperty- 来添加样式。
    请添加图片描述

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;