Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2621|回复: 0
打印 上一主题 下一主题

Qt qss 样式 使用

[复制链接]

1272

主题

2067

帖子

7962

积分

认证用户组

Rank: 5Rank: 5

积分
7962
跳转到指定楼层
楼主
发表于 2020-3-9 15:48:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Qter 于 2020-3-9 16:18 编辑

1         使用Qss设置QT程序界面的样式和皮肤1.1  Qss的功能
Qt程序界面中控件的背景图片、大小、字体颜色、字体类型、按钮状态变化等属性可以通过Qss文件来设置,美化UI界面。实现界面和程序的分离,快速切换皮肤。
1.2  QSS基本属性设置
Qss的强大在于组合功能的强大,这里只是简单介绍基本功能,将简单功能组合起来才能实现好看的效果。
Qss背景属性(Background
属性
描述
CSS
在一个声明中设置所有的背景属性
1
设置背景图像是否固定或者随着页面的其余部分滚动。
1
设置元素的背景颜色。
1
设置元素的背景图像。
1
设置背景图像的开始位置。
1
设置是否及如何重复背景图像。
1
规定背景的绘制区域。
3
规定背景图片的定位区域。
3
规定背景图片的尺寸。
3
QSS边框属性(Border 和 Outline
属性
描述
CSS
在一个声明中设置所有的边框属性
1
在一个声明中设置所有的下边框属性
1
设置下边框的颜色。
2
设置下边框的样式。
2
设置下边框的宽度。
1
设置四条边框的颜色。
1
在一个声明中设置所有的左边框属性
1
设置左边框的颜色。
2
设置左边框的样式。
2
设置左边框的宽度。
1
在一个声明中设置所有的右边框属性
1
设置右边框的颜色。
2
设置右边框的样式。
2
设置右边框的宽度。
1
设置四条边框的样式。
1
在一个声明中设置所有的上边框属性
1
设置上边框的颜色。
2
设置上边框的样式。
2
设置上边框的宽度。
1
设置四条边框的宽度。
1
在一个声明中设置所有的轮廓属性
2
设置轮廓的颜色。
2
设置轮廓的样式。
2
设置轮廓的宽度。
2
定义边框左下角的形状。
3
定义边框右下角的形状。
3
简写属性,设置所有 border-image-* 属性
3
规定边框图像区域超出边框的量。
3
图像边框是否应平铺(repeated)、铺满(rounded)或拉伸(stretched)。
3
规定图像边框的向内偏移。
3
规定用作边框的图片。
3
规定图片边框的宽度。
3
简写属性,设置所有四个 border-*-radius 属性
3
定义边框左上角的形状。
3
定义边框右下角的形状。
3
box-decoration-break
�0�2
3
向方框添加一个或多个阴影。
3
Box 属性
属性
描述
CSS
如果内容溢出了元素内容区域,是否对内容的左/右边缘进行裁剪。
3
如果内容溢出了元素内容区域,是否对内容的上/下边缘进行裁剪。
3
规定溢出元素的首选滚动方法。
3
围绕由 rotation-point 属性定义的点对元素进行旋转。
3
定义距离上左边框边缘的偏移点。
3
QSS字体属性(Font
属性
描述
CSS
在一个声明中设置所有字体属性
1
规定文本的字体系列。
1
规定文本的字体尺寸。
1
为元素规定 aspect 值。
2
收缩或拉伸当前的字体系列。
2
规定文本的字体样式。
1
规定是否以小型大写字母的字体显示文本。
1
规定字体的粗细。
1
QSS外边距属性(Margin
属性
描述
CSS
在一个声明中设置所有外边距属性
1
设置元素的下外边距。
1
设置元素的左外边距。
1
设置元素的右外边距。
1
设置元素的上外边距。
1
CSS 内边距属性(Padding
属性
描述
CSS
在一个声明中设置所有内边距属性
1
设置元素的下内边距。
1
设置元素的左内边距。
1
设置元素的右内边距。
1
设置元素的上内边距。
1
CSS 定位属性(Positioning
属性
描述
CSS
设置定位元素下外边距边界与其包含块下边界之间的偏移。
2
规定元素的哪一侧不允许其他浮动元素。
1
剪裁绝对定位元素。
2
规定要显示的光标的类型(形状)。
2
规定元素应该生成的框的类型。
1
规定框是否应该浮动。
1
设置定位元素左外边距边界与其包含块左边界之间的偏移。
2
规定当内容溢出元素框时发生的事情。
2
规定元素的定位类型。
2
设置定位元素右外边距边界与其包含块右边界之间的偏移。
2
设置定位元素的上外边距边界与其包含块上边界之间的偏移。
2
设置元素的垂直对齐方式。
1
规定元素是否可见。
2
设置元素的堆叠顺序。
2
CSS 文本属性(Text
属性
描述
CSS
设置文本的颜色。
1
规定文本的方向 / 书写方向。
2
设置字符间距。
1
设置行高。
1
规定文本的水平对齐方式。
1
规定添加到文本的装饰效果。
1
规定文本块首行的缩进。
1
text-shadow
规定添加到文本的阴影效果。
2
控制文本的大小写。
1
设置文本方向。
2
规定如何处理元素中的空白。
1
设置单词间距。
1
规定标点字符是否位于线框之外。
3
规定是否对标点字符进行修剪。
3
text-align-last
设置如何对齐最后一行或紧挨着强制换行符之前的行。
3
向元素的文本应用重点标记以及重点标记的前景色。
3
规定当 text-align 设置为 "justify" 时所使用的对齐方法。
3
规定文本的轮廓。
3
规定当文本溢出包含元素时发生的事情。
3
向文本添加阴影。
3
规定文本的换行规则。
3
规定非中日韩文本的换行规则。
3
允许对长的不可分割的单词进行分割并换行到下一行。
3
1.3  Qss过滤选择器和优先级1.3.1            Qss选择器
Qss有一些规则用来设置符合规则的控件名称,通常是按照通用属性设置一类控件,对某个有特殊要求的在特别设置。避免大量的重复设置。分为
  • 通配选择器:*  ;所有的控件属性设置

*
{
}
  • 类型选择器:QPushButton ; 匹配所有QPushButton和其子类的实例

QPushButton
{
}
3.类选择器:  .QPushButton ;  匹配所有QPushButton的实例,但是并不匹配其子类。这是与CSS中的类选择器不一样的地方,注意前面有一个点号
.QPushButton
{
}
4.属性选择器:QPushButton[flat="false"]; 匹配所有flat属性是false的QPushButton实例,注意该属性可以是自定义的属性,不一定非要是类本身具有的属性
QPushButton[flat="false"]
{
}
5.ID选择器:  #myButton; 匹配所有id为myButton的控件实例,这里的id实际上就是objectName指定的值,针对特定名称的控件设置属性。
QPushButton#myButton1, #myButton2
{
}
6.后代选择器: QDialog QPushButton ; 所有QDialog容器中包含的QPushButton,不管是直接的还是间接的。
QDialog QPushButton
{
}
7.子选择器:  QDialog > QPushButton; 所有QDialog容器下面的QPushButton,其中要求QPushButton的直接父容器是QDialog
QDialog > QPushButton
{
}
1.3.2            Qss优先级
上面虽然用了选择器,单肯定会有重复的设置,那么系统怎么去排列这些设置的优先级。原则:宽泛的设置优先级低于更加针对具体的设置,文件上面的设置优先级低于文件下面的设置。
1.4  Qss开发步骤
(1)   添加资源文件qrc,在资源里添加qss文件,图片皮肤文件等。

(2)   分界面在qss文件中设置各控件的属性值
Qss中配置一般按照如下格式配置
控件类型#控件名称1,控件名称2,控件名称3
{
控件属性;
}
按钮属性设置

按钮为background背景图片的形式
QToolButton#addTimeBtn{//常规属性设置
       font-size: 12px;
       background: url(:/addanddeduct/image/add-l-16-normal.png) no-repeat center center;//背景图片资源中的路径,不重复,居中、居中显示。
       background-repeat:no-repeat;//图片较小时,不显示个。
       border-style: flat;//扁平
       border-left:1px solid #CCCCCC;//边框线条粗细、虚实、颜色
}
QToolButton#addTimeBtn:hover{//按钮高亮属性设置
       background: url(:/addanddeduct/image/add-l-16-hov.png) no-repeat center center;
       background-repeat:no-repeat;
       border-style: flat;
       border-left:1px solid #CCCCCC;
}

QToolButton#addTimeBtn:pressed{//按钮按下时的属性设置
       background: url(:/addanddeduct/image/add-l-16-pressed.png) no-repeat center center;
       border-style: flat;
       border-left:1px solid #CCCCCC;
}
按钮为qproperty-icon图片加文字的形式
/*删除报警按键设置*/
QToolButton#delAlarmBtn{
       font-size: 12px;
       border-style:inset;
       border:0px solid #E5E5E5;
       qproperty-icon: url(:/qss/image/lidaicon-h-trashcan.svg);
    qproperty-iconSize: 16px 16px;//图片大小
    qproperty-toolButtonStyle: ToolButtonTextBesideIcon;//文字和图片样式
}
QToolButton#delAlarmBtn:pressed{
       color:#1C72DD;
       border: 0px solid #1C72DD;
       font-size: 12px;
       border-style:inset;
       qproperty-icon: url(:/qss/image/lidaicon-h-trashcan-pressed.svg);
    qproperty-iconSize: 16px 16px;
    qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
}
QToolButton#delAlarmBtn:hover{
       color:#4C99F8;
       font-size: 12px;
       border-style:inset;
       border: 0px solid #4C99F8;
       qproperty-icon: url(:/qss/image/lidaicon-h-trashcan-pressed.svg);
    qproperty-iconSize: 16px 16px;
    qproperty-toolButtonStyle: ToolButtonTextBesideIcon;
}
QCheckBox{
        spacing: 5px;
        color: black;
              border-style: flat;
}
复选框QCheckBox属性设置
QCheckBox::indicator
{
        width: 17px;
        height: 17px;
              image: url(:/checkImage/image/checkImage/check-nor.png);
}
QCheckBox::indicator:hover {
    image: url(:/checkImage/image/checkImage/check-hov.png);
}
QCheckBox::indicator:checked{
    image: url(:/checkImage/image/checkImage/check-sel.png);
}

QComboBox属性设置
QComboBox::drop-down:hover:pressed
{//下拉按钮设置
       subcontrol-position:center right;//按钮位置
       image:url(:/qss/image/angle-down.png);//按钮图片
}
QComboBox:drop-down
{
       subcontrol-position:center right;
       image:url(:/qss/image/angle-down-l-16.png);
}
QComboBox
{// QComboBox本身属性设置
       border: 1px solid #CCCCCC;
       border-radius: 2px;
}
QComboBox::hover
{//鼠标移上去,边框变蓝色
       /* 边框宽度,线条样式,颜色 */
    border:1px solid #2080F7;  
    /* 内边框 */
    padding:1px 18px 1px 3px;
    min-width:100px;
       font:12px;
}
QComboBox QAbstractItemView
{//下拉列表中的选项设置
      border: 1px solid #2080F7;
      selection-//选中背景色
}
/*水平滚动条*/
QScrollBar:horizontal{
       width:8px;
       padding-top:0px;
       padding-bottom:0px;
       padding-right:0px;
       padding-left:0px;
       background: #000000;
       border-radius:100px;
}
QScrollBar::handle:horizontal{
       background:#E5E5E5;
       width:8px;
       border: 0px solid #E5E5E5;
       min-height:20px;
       border-radius:100px;
}
QScrollBar::handle:horizontal:normal{
       background:#F5F5F5;
       width:8px;
       border: 0px solid #E5E5E5;
       border-radius:100px;
}
QScrollBar::handle:horizontal:hover{
       background:#E6E6E6;
       width:8px;
       border: 0px solid #E5E5E5;
       border-radius:100px;
}
QScrollBar::handle:horizontal:pressed{
       background:#CCCCCC;
       width:8px;
       border: 0px solid #E5E5E5;
       border-radius:100px;
}   


QScrollBar滚动条属性设置
/*垂直滚动条*/
QScrollBar:vertical
{
       width:8px;  //宽度
       padding-top:4px; //内上边距设置
       padding-bottom:0px;
       padding-right:0px;
       padding-left:0px;
       background: #000000;
       border-radius:100px;
}
QScrollBar::handle:vertical{ //滑块属性设置
       background:#E5E5E5;
       width:8px;
       border: 0px solid #E5E5E5;
       min-height:20px;
       border-radius:100px;
}
QScrollBar::handle:vertical:normal{
       background:#F5F5F5;
       width:8px;
       border: 0px solid #E5E5E5;
       border-radius:100px;
}
QScrollBar::handle:vertical:hover{
       background:#E6E6E6;
       width:8px;
       border: 0px solid #E5E5E5;
       border-radius:100px;
}
QScrollBar::handle:vertical:pressed{
       background:#CCCCCC;
       width:8px;
       border: 0px solid #E5E5E5;
       border-radius:100px;
}
QScrollBar{
background: #000000;
}
QScrollBar::pressed
{
       background: #000000;
}
QTableWidget属性设置
QTableWidget#tableWidget::Item
{
       border:0px solid #E5E5E5;
       border-bottom:1px solid #E5E5E5;
       font-size: 12px;
       color: #4C4C4C;
       font - family: Microsoft YaHei;
       alternate- /*行交替颜色*/
    selection-background-color: #E9F2FE; /*选中行背景颜色*/
}
QTableWidget#tableWidget::Item:selected
{
       background:#4C99F8;
}
QTableWidget表头属性设置
QHeaderView::section{
       font-size: 12px;
       color: #000000;
       font - family: Microsoft YaHei;
       font-weight: bold;
       height:36px;/*表头高度*/
       border-style: flat;

       border-bottom:1px solid #E5E5E5;
       border-top:0px solid #E5E5E5;
       alignment: left;//左对齐
}
QTabWidget切换界面Tab属性设置
QTabWidget::pane //边框设置
{
       border-top: 1px solid #E5E5E5;
              border-left:1px solid #E5E5E5;
              position: absolute;
              font-size: 14px;
}
QTabWidget::tab-bar {
              border-bottom: 2px solid #E5E5E5;
              border-left:1px solid #E5E5E5;
              alignment: left;
              font-size: 14px;
}
QTabBar::tab {//切换按钮设置
    border: none;
    border-bottom-color: #C2C7CB; /* same as the pane color */
    border-top-left-radius: 4px;//上左交界处的圆角
    border-top-right-radius: 4px;
    min-width: 8ex;
    padding: 2px;
       font-size: 14px;
}
QTabBar::tab:hover {
       color:#2080F7;//选中高亮
}
QTabBar::tab:selected {
       color:#2080F7;
       border-bottom: 2px solid #2080F7;//下边框线条属性
       font-weight:bold;//加粗
}
(3)   将qss文件添加到步骤(1)中添加的qrc资源文件中,注意每次修改之后都要重新加入。否则不生效。
(4)   在代码中访问qss文件,读取文件内容,通过setstylesheet函数设置属性
QByteArray CSkinCtrl::ReadAllContents(const QString& dir_name)
       {
              QByteArray content;

              //获取路径下所有文件,如果是qrc路径呢?
              QStringList file_name_list = QDir(dir_name).entryList(QDir::Files);
              //将所有的读取的文件内容汇总到content
              for each (QString file_name in file_name_list)
              {
                     QFile file(dir_name + file_name);
                     if (file.open(QIODevice::ReadOnly))
                     {
                            content += file.readAll();
                            file.close();
                     }
              }
              //遍历子文件夹中的文件
              QStringList dir_name_list = QDir(dir_name).entryList(QDir:irs);
              for each (QString dir in dir_name_list)
              {
                     content += ReadAllContents(dir_name + dir + "/");
              }

              return content;
       }
调用读取函数,用qApp->setStyleSheet设置
QString gui_qss_path = ":/qss/iVMSGUIToolkit/";
              QString client_qss_path = ":/qss/qss/";
qApp->setStyleSheet(ReadAllContents(gui_qss_path) + ReadAllContents(client_qss_path));


自己编了一个股票监控软件,有如下功能,有兴趣的朋友可以下载;
(1)   个股监测。监测个股实时变化,可以监测个股大单交易、急速拉升和下降、主力入场和出场、股票最高点和最低点提醒。检测到最高点、最低点、主力进场点、主力退场点、急速拉升点、急速下跌点,给出语音或者声音提醒,不用再时刻看着大盘了,给你更多自由的时间;
(2)   大盘监测。监测大盘的走势,采用上证、深证、创业三大指数的综合指数作为大盘走势。并实时监测大盘的最高点和最低点、中间的转折点。
(3)   股票推荐。还能根据历史数据长期或短期走势进行分析,对股市3千多个股票进行分析对比,选出涨势良好的股票,按照增长速度从大到小排序,推荐给你涨势良好的股票;
下载地址:
1.0.3版本(修复大盘指数崩溃缺陷)下载地址:
更新链接:
https://www.cnblogs.com/bclshuai/p/10621613.html


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-11-26 05:05 , Processed in 0.083237 second(s), 19 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表