Qt 关于setStyleSheet,有时间再测试下各种情况

Qt 有好用的Qss系统.
但是这和CSS还是有很多不同.
:
QSS语法主要针对的是C++类.基类和派生类之间的关系.当然也包含一些CSS的父子关系

来看看一般情况下的选择器
我在此把选择器分为控件关联和继承关联. 因为这两种子类是不同的,所以我把继承关联的子类写成派生类.


类型选择器:QPushButton  继承关联 type
匹配所有QPushButton的实例和其派生类(含派生类的派生类...)的实例。

类选择器.QPushButton  继承关联+层别区分 class  等价于*.QPushButton
匹配所有QPushButton的实例,但不包含其子类,这相当于:*[class~="QPushButton"]
~=的意思是测试一个QStringList类型的属性是否包含给定的QString
To match a subset of "class" values, each value must be preceded by a ".".

属性选择器:QPushButton[flat="false"] 继承关联+属性区分
匹配所有QPushButton属性flat为false的实例,
属性分为两种,静态的和动态的,静态属性是通过Q_PROPERTY()来指定的,动态属性通过使用setProperty来指定,如:
QLineEdit *nameEdit = new QLineEdit(this); //静态
nameEdit->setProperty("mandatoryField", true); //动态
如果在设置了qss后Qt属性改变了,需要重新设置qss来使其生效,可以使用先unset再set qss。

ID选择器:QPushButton#okButton 继承关联+手动区分
对应Qt里面的object name设置,使用这条CSS之前要先设置对应控件的object name为okButton
如:Ok->setObjectName(tr("okButton"));
E#myid : Matches any E element with ID equal to "myid".

通用类型选择器* 控件关联
代表所有已有的类,会对所有控件有效果。

后代选择器:QDialog QPushButton 控件关联+层别不区分
匹配所有为QDialog后裔(包含儿子 和 儿子的儿子的递归)为QPushButton的实例
意思是所有QDialog的子控件的子控件(可递归),只要是QPushButton 就选中.

子选择器:QDialog > QPushButton 控件关联+层别区分
匹配所有的QDialog直接控件QPushButton的实例,不包含儿子的儿子的递归。


一些等同情况.
*[lang=fr]  and [lang=fr] are equivalent.
*.warning and .warning are equivalent.
*#myid and #myid are equivalent.

最后:重要的一点.setStyleSheet("...");其实等价于 setStyleSheet("* {...}"); 要小心为上了.

理解了上面这些,Qss其他部分应该比较好理解了.以后再写.

2012-12-06




展开阅读全文

没有更多推荐了,返回首页