您的位置:首页 > 编程语言 > Qt开发

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

2012-12-06 11:28 1126 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: