• 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
  • 相关阅读:
    第七次作业-正规式到正规文法与自动机
    第六次作业——正规文法与正规式
    作业5 词法分析程序的设计与实现
    作业4—文法和语言总结与梳理
    第三次作业
    第二次作业-语言和文法
    编译原理第一次作业
    记录在腾讯云上搭建Ubuntu服务器
    第八章总结--排序 数据结构课程终章
    第七章-查找
  • 原文地址:https://www.cnblogs.com/azbane/p/12606193.html
Copyright © 2020-2023  润新知