Qt QSS 精华

一、Qt样式表句法
    1、一个样式法则由一个选择器(selector)和一些声明(declaration)组成。
        a-选择器表明样式声明应用于选择器对应的类,或其子类。
        b-声明由属性和值组成,属性有多个值时, 用空格隔开, 每条声明法则用分号结束。
    2、选择器(selector)
        2.1 Qt样式表支持CSS2定义的所有选择器。
            选择器 # 例子 # 用途
            通用选择器 # * # 所有组件
            类型选择器 # ClassName # 所有ClassName类及其子类的组件
            属性选择器 # ClassName[flat="false"] # 所有flat属性为false的ClassName类及其子类的组件。如果样式表应用后组件的属性再发生变化,需要重新应用样式表才能刷新显示效果。
            非子类选择器 # .ClassName # 所有ClassName类的组件,但不包括其子类组件
            ID选择器 # ClassName#className # ObjectName为className的ClassName实例
            从属对象选择器 # ClassName1 ClassName2 # 所有从属于ClassName1的ClassName2的实例
            子对象选择器 # ClassName1>ClassName2 # 所有直接从属于ClassName1的ClassName2的实例

    3、QOjbect::setProperty()设置动态属性。
    4、选择器可组合使用同一声明,多个选择器用逗号分隔。
    5、子控件(sub-controls)
        对组合的界面组件的子控件进行选择
        5.1 "::"域解析符标识子控件。如:QComboBox::drop-down; QSpinBox::up-button; QSpinBox::down-button\
        5.2 常见子控件列表
            子控件名 #  说明
            branck # QTreeView的分支指示器
            section # QHeaderView的分段

            up-arrow # QHeaderView(排序指示器), QScrollBar, QSpinBox的向上箭头
            down-arrow # QHeaderView(排序指示器), QComboBox, QScrollBar, QSpinBox的下拉箭头[箭头并非下拉按钮]

            up-button # QSpinBox, QScrollBar的向上的按钮 [按钮并非向上的箭头]
            down-button # QSpinBox, QScrollBar的向下的按钮

            indicator # QAbstractItemView, QCheckBox, QRadioButton, 可勾选的QMenu菜单项, 可勾选的QGroupBox的指示器
            icon # QAbstractItemView, QMenu的图标
            item # QAbstractItemView, QMenuBar, QStatusBar的一个项
            text # QAbstractItemView的文字

            right-arrow # QMenu, QScrollBar的向右箭头
            left-arrow # QMenu, QScrollBar的向左箭头
            separator # QMenu, QMainWindow的分隔器

            handle # QScrollBar, QSplitter, QSlider的滑块
            chunk # QProgressBar的进度显示快
            groove # QSlider的凹槽

            menu-arrow # 具有下拉菜单的QToolButton的下拉箭头
            menu-button # QToolButton的菜单按钮
            menu-indicator # QPushButton的菜单指示器

            close-button # QTabBar, QDockWidget页面的关闭按钮
            pane # QTabWidget的面板
            tab # QTabBar, QToolBox的分页
            tab-bar # QTabWidget的分页条。 这个子控件只用于控制QTabBar在QTabWidgegt中的位置,定义分页的样式使用tab子控件

    6、伪状态(pseudo-states)
        6.1 选择器可以包含伪状态,使得样式法则只能应用于界面组件的某个状态, 也就是一种条件应用法则。伪状态跟在选择器后边,用“:”分隔
        6.2 伪状态可以取反, 在伪状态前边加一个感叹号"!"
        6.3 伪状态可以串联使用, 相当于逻辑与的计算。 例如:QCheckBox:hover:checked{color:red;} 鼠标移动到被勾选的QCheckBox组件上方时文字变红。
        6.4 伪状态可以并联使用, 相当于逻辑或的计算。 例如:QCheckBox:hover, QCheckBox:checked{color:red;} 鼠标移动到组件上方,或组件被勾选
        6.5 子控件可以使用伪状态。 例如:QCheckBox::indicator:checked{image:url(...);} 组件的子控件在checked状态下显示的图片
        6.6 常见的伪状态
            伪状态 # 描述
            active # 当组件处于一个活动的窗体时, 此状态为真
            alternate # 当QAbstractItemView的alternatingRowColors()属性为true时, 绘制交替的行时此状态为真
            exclusive # 条目是一个排他性组的一部分, 如:排他性QActionGroup的一个项
            flat # 条目是flat的, 如:QPushButton的flat属性设置true时
            default # 条目是缺省的, 如:一个缺省的QPushButton按钮, 或QMenu中一个缺省的action

            has-children # 条目有子条目, 如:QTreeView的一个节点具有子节点
            open # 条目处于打开状态, 如:QTreeView的一个展开的条目
            close # 条目处于关闭状态, 如:QTreeView的一个没有展开的条目
            off # 对于可以切换状态的条目, 其状态处于"off"
            on # 对于可以切换状态的条目, 其状态处于"on"
            adjoins-item # QTreeView::branch与一个条目相邻时, 状态为真 (真实描述:item左侧到顶的空白区域 background-color:blue;)
enabled # 条目被使能 disabled # 条目被禁用 editable # QComboBox是可编辑的 edit-focus # 条目有编辑焦点 movable # 条目是可移动的 read-only # 条目只读或不可编辑 top # 组件处于顶端, 如QTabBar的页头位于顶端 bottom # 组件处于底部,如QTabBar的标头位于底部 checked # 组件处于被勾选状态, 如QAbstractButton的checked属性为true unchecked # 组件处于未被勾选状态 selected # 条目被选中, 如:QTabBar中一个被选中的页, 或QMenu中被选中的菜单项 horizontal # 条目具有水平方向 vertical # 条目具有垂直方向 hover # 鼠标移动到条目上方时 pressed # 鼠标按下时 first # 第一个项, 如:QTabBar中的第一个页 last # 最后一个项, 如:QTabBar中最后一个项 left # 条目位于左侧, 如:QTabBar的页头位于左侧 right # 条目位于右侧, 如:QTabBar的页头位于右侧 maximized # 条目处于最大化, 如:最大化的QMdiSubWindow窗口 minimized # 条目处于最小化, 如:最小化的QMdiSubWindow窗口 7、属性 在Qt帮助文件中查找"Qt Style Sheets Reference"查看所有属性的详细说明。 7.1 每一个界面组件,都可以用盒子模型(Box Model)来表示, 模型由四个同心矩形表示。 margin; border; padding; content; 7.2 content-内容区域 min-width; max-width; min-height; max-height; 7.3 padding-包围content的矩形区域 padding-top; padding-bottom; padding-left; padding-right; 7.4 border-包围padding的矩形区域 border-width; border-style; border-color; border-radius; border-image 使边框转角半径等于content宽度或长度的一半,宽度和长度相等,就可以得到一个圆形按钮。 7.5 margin-border之外与父组件之间的空白边距 margin-top; margin-bottom; margin-left; margin-right; 7.6 缺省情况下, margin, border-width, padding属性缺省值为零,四个同心矩形就是重合的一个矩形。 7.7 常用的属性表 属性名 color; //前景色 background-color; //背景色 selection-color; selection-backgroun-color; 7.8 qss文件的使用 QFile file(.../xxx.qss); file.open(QFile::ReadOnly); QString styleSheet = QString::fromLatin1(file.readAll()); qApp->setStyleSheet(styleSheet); 8、样式定义的明确性 8.1 多条样式法则对同一属性定义不同值时,选择器的明确性(specificity)决定法则应用于更明确的控件。 8.2 具有伪状态的选择器被认为比没有伪状态的选择器明确性更强。 8.3 两个选择器具有相同的明确性, 则以法则出现的先后顺序为准,后出现的法则起作用。 QPushButton:hover{color:white;} QPushButton:enabled{color:red;} 当鼠标停留在一个使能按钮上时,只有第二条法则起作用,如果不希望出现冲突,应使法则更明确,如下 QPushButton:hover:enabled{color:white;} QPushButton:enable{color:red;}; 8.4 针对8.3,值得注意的是, 父子关系的两个类作为选择器时,具有相同的明确性。 QPushButton{color:red;} QAbstractButton{color:gray;} 依赖于先后顺序,显示为灰色。 9、样式定义的级联性 9.1 样式定义可以在qApp、窗口或一个具体组件中定义, 任何一个组件的样式是其父组件、父窗口和qApp的样式融合。当出现冲突时, 组件会使用离自己最近的样式定义,即按顺序使用组件自己的样式、或父组件的样式定义、或窗口的样式定义, 或qApp的样式定义,而不考虑选择器的确定性。 9.2 !!!样式定义的级联性, 不会考虑样式选择器的确定性。 10、qss文件的注释 /*Tree header*/ --正确 //Tree header --错误,会导致后边的qss无效 11、qss调试的好办法 做项目时,调试qss, 修改某局部qss,而重新构建整个项目才能看出修改效果的方法,实在是耗时低效。 一个好的办法是,再启动一个Qt Creator创建一个test工程,添加一个QWidget设计界面,拖一个要美化的控件组件,右键级联方式,实时查看修改后的效果是否满意,满意后,再把样式拷贝到项目中。完美。 二、应用于不同平台的外观样式设置 QStyle

猜你喜欢

转载自www.cnblogs.com/azbane/p/12606193.html
今日推荐