Qt Style Sheet 翻译(中)--类似css

//这个实在是难翻译,很多地方直译,因为我也没看懂
 
细微控制:
为了风格化复杂的 widget ,那是必须的进行 widget 的细微控制。例如一个 QComboBox drop-down 按钮,或者一个 QSpinBox 的上下线。选择器可能包含细微控制,使限制一个规则的应用来说明 widget 细微控制。例如:
QComboBox::drop-down { image: url(dropdown.png) }
      
上面的规则风格化所有的 QComboBox 的上下按钮。尽管双冒号::语句像 CSS3 Pseudo-Elements Qt 的细微控制不同于这些,有不同的级联语义。
细微控制总是定位根据另一个元素 --― 一个参考元素。这个参考元素能是 widget 或者另一个细微控制。例如,一个 QComboBox 的:: drop-down 被定位,缺省的,在 QComboBox 衬底矩形的右上角。 ::drop-down 被定位,缺省的,在:: drop-down 微调内容矩形的中心。看
List of Stylable Widgets 来风格化一个 widget 和他们缺省的位置。
起点能被改变通过使用 subcontrol-origin 。例如,如果我们想定位 drop-down QComboBox 空白处代替缺省的衬底部分,我们能这样:
QComboBox {
      
     margin-right: 20px;
      
 }
      
 QComboBox::drop-down {
      
     subcontrol-origin: margin;
      
 }
      
drop-down 的对齐在空白矩形范围可以通过subcontrol-position改变。宽度和高度属性能被用来控制微调的大小。注意设置一个图片潜在的设置了微调的大小。
相对位置的设置方法(positionrelative),允许微调的位置抵消他的原来的位置。例如,当QComboBoxdrop-down按钮被按下,我们可能想要一种被按下的效果。如下:
QComboBox::down-arrow {
      
     image: url(down_arrow.png);
      
 }
      
 QComboBox::down-arrow:pressed {
      
     position: relative;
      
     top: 1px; left: 1px;
      
 }
      
绝对位置的设置方法(positionabsolute),允许微调的位置和大小被改变与参考元素相关。一旦定位,他们被对待和widget一样,能被风格化通过使用box model。看 List of Sub-Controls为支持的微调。
注意:对于复杂的widget例如QComboBoxQScrollBar,如果一个属性或者微调被定制,所有其他的属性或者微调必须也被定制。
虚假状态:
选择器可能包含虚假状态,指出限制那些基于widget状态规则的应用。虚假状态出现在选择器的结尾,用一个冒号(:)。例如
QPushButton:hover { color: white }
      
虚假状态能被取反,通过使用叹号操作。例如
QRadioButton:!hover { color: red }
      
虚假状态能被连接,相当于逻辑与。例如
QCheckBox:hover:checked { color: white }
      
QPushButton:hover:!pressed { color: blue; }
      
也可以用逗号代替
QCheckBox:hover, QCheckBox:checked { color: white }
      
虚假状态也能和微调结合
QComboBox::drop-down:hover { image: url(dropdown_bright.png) }
      
冲突解决:
冲突产生,当一些风格语句改变相同的属性,使用不同的值。考虑下面的风格语句:
QPushButton#okButton { color: gray }
      
 QPushButton { color: red }
      
为解决这个冲突,我们必须了解选择器的特性。在上面的例子中, QPushButton#okButton 是被认为更特别的比起 QPushButton ,因为他代表单个的对象,不是所有的一个类的例子。
同样的,带虚假状态的选择器是更特别的比起没有虚假状态的。因此,下面的风格语句表明:
当一个鼠标滑过 QPushButton 时,有白色的 text ,否则红色 text
QPushButton:hover { color: white }
      
 QPushButton { color: red }
      
这是一个复杂的。
QPushButton:hover { color: white }
      
 QPushButton:enabled { color: red }
      
两个选择器有相同的特性,所以如果鼠标滑过按钮当他使能时,第二个规则取得优先权。如果我们想要text在那种情况为白色,我们可以这样
QPushButton:enabled { color: red }
      
 QPushButton:hover { color: white }
      
作为选择,我们也可以使第一个规则更特别
QPushButton:hover:enabled { color: white }
      
 QPushButton:enabled { color: red }
      
一个相同的问题产生,
QPushButton { color: red }
      
 QAbstractButton { color: gray }
      
两个规则都应用于QPushButton,因为QPushButton继承QAbstractButton,他可能试着假设QPushButton是更特别比QAbstractButton。尽管如此,对于风格计算,所有的类型选择器有相同的特性,最后一个出现的规则有优先权。换句话说,颜色被设置成gray对于所有的QAbstractButton,包括QPushButton。如果我们真的想要QPushButton有红色text,我们能够重新设置规则。
为了决定一个规则的特性,Qt Style Sheets效仿CSS2 Specification
一个选择器的特性被计算像下面:
ID属性数在选择器中。=a
数其他属性和虚假类的数目在选择器中。=b
数元素名字的数目在选择器中。 =c
忽略虚假属性
连接三个数目 a-b-c (在一个数目系统带着一个大的基数)给出特性。
*             {}  /* a=0 b=
      
      
       0 c
      =0 -> specificity =   0 */
      
 LI            {}  /* a=0 b=
      
       0 c
      =1 -> specificity =   1 */
      
 UL LI         {}  /* a=0 b=
      
       0 c
      =2 -> specificity =   2 */
      
 UL OL+LI      {}  /* a=0 b=
      
       0 c
      =3 -> specificity =   3 */
      
 H1 + *[REL=up]{}  /* a=0 b=
      
       1 c
      =1 -> specificity =  11 */
      
 UL OL LI.red  {}  /* a=0 b=
      
       1 c
      =3 -> specificity =  13 */
      
 LI.red.level  {}  /* a=0 b=
      
       2 c
      =1 -> specificity =  21 */
      
 #x34y         {}  /* a=1 b=
      
       0 c
      =0 -> specificity = 100 */
      
级联:
Style sheet 能被设置在 QApplication ,在父窗口,在孩子窗口。一个随意的 widget 的有效地 style sheet 是被包含通过合并设置在 widget 的祖先的 style sheet ,也任何被设置在 QApplication 上的 style sheet
当冲突产生, widget 的自己的 style sheet 总是跟喜欢任何继承的 style sheet ,不同于冲突的规则的特性。否则,父窗口的 style sheet 更喜欢祖父的。
这样的一个结果是设置一个 style 规则在一个 widget 自动的,给他优先权盖过其他的规则在祖先 widget style sheet 或者 QApplication style sheet 。考虑下面的例子,
qApp->setStyleSheet("QPushButton { color: white }"); myPushButton->setStyleSheet("* { color: blue }");
      
它等同于: 
myPushButton->setStyleSheet("color: blue");
      
如果QPushButton有孩子。Style sheet将对他们没有影响。Style sheet级联是一个复杂的主题。参考CSS2 Specification为站点类别详情。知道qt目前不执行!important 
继承: 
在经典的CSS,当一个item的字体和颜色不是确切被设置,它自动继承从父类。当使用qt style sheet,一个widget不自动继承他的字体和颜色设置佛纳甘他的父窗口。 
qApp->setStyleSheet("QGroupBox { color: red; } ");
      
QPushButton没有一个明确的颜色设置。因此,代替继承他的父类颜色QGroupBox,他有系统颜色。如果我们想颜色在一个QGroupBox和他的孩子,我们能写: 
qApp->setStyleSheet("QGroupBox, QGroupBox * { color: red; }");
      
相比之下,设置一个字体和繁衍,使用QWidget::setFont()QWidget::setPalette()繁衍来孩子widget 
Widgetsc++命名空间内 
类型选择器能被用来风格化widgets 
class MyPushButton : public QPushButton {
      
     // ...
      
 }
      

    
      
    
 // ...
      
 qApp->setStyleSheet("MyPushButton { background: yellow; }");
      
Qt style sheet使用QObject::className()来决定何时应用类型选择器。当定制widget是在命名空间内,QObject::className()返回<namespace>::<classname>.这和微调语句冲突。为了克服这个问题,当使用类型选择器为命名空间内的widget,我们必须替代“::”使用“-- 
namespace ns {
      
     class MyPushButton : public QPushButton {
      
         // ...
      
     }
      
 }
      

    
      
    
 // ...
      
 qApp->setSytleSheet("ns--MyPushButton { background: yellow; }");
      
设置对象属性:
qt4.3 和以上的版本,任何能设计的 Q_PROPERTY 能被设置使用 qproperty-<property name> 语句。
MyLabel { qproperty-pixmap: url(pixmap.png); }
      
 MyGroupBox { qproperty-titleColor: rgb(100, 200, 100); }
      
 QPushButton { qproperty-iconSize: 20px 20px; }
      
如果属性参考一个 enum 类型 Q_ENUMS, 你能参考他的常量通过名字,不是他们的数字值。

你可能感兴趣的:(css,style,qt,sheet,休闲)