• QSS之QComboBox


     QComboBox在Qt开发过程中经常使用,默认的下载列表风格达不到设计师的要求,本篇介绍基本的QComboBox的qss设置。

    属性意思
    QComboBoxQComboBox基本样式
    QComboBox:editable右边可选择按钮
    QComboBox:!editable, QComboBox::drop-down:editable不可编辑或下拉时,comboxBox显示的背景状态
    QComboBox:!editable:on, QComboBox::drop-down:editable:on下拉项展开时,comboxBox显示的背景状态
    QComboBox:on下拉项展开时,comboxBox选中文字样式
    QComboBox::drop-down下拉按钮样式 子控件填充方式
    QComboBox::drop-down:hover下面按钮悬浮样式  鼠标悬浮样式
    QComboBox::down-arrow下拉箭头样式
    QComboBox::down-arrow:on下拉列表展开时下拉箭头样式

    1. QString comboxStyle2 = QString(
    2. //1.界面上comboxBox样式 红色边框,圆角为3, 文字右边距边框13px, 最小宽度60px
    3. "QComboBox{border: 1px solid red;border-radius:3px;padding: 1px 18px 1px 13px;min-width: 60px;}"
    4. //2.右边可选择按钮 黄色
    5. "QComboBox:editable {background: yellow;}"
    6. //3.不可编辑或下拉时,comboxBox显示的背景状态
    7. "QComboBox:!editable, QComboBox::drop-down:editable {background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #E1E1E1, stop: 0.4 #DDDDDD, stop: 0.5 #D8D8D8, stop: 1.0 #D3D3D3);}"
    8. //4.下拉项展开时,comboxBox显示的背景状态
    9. "QComboBox:!editable:on, QComboBox::drop-down:editable:on {background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #D3D3D3, stop: 0.4 #666666, stop: 0.5 #DDDDDD, stop: 1.0 #E1E1E1);}"
    10. //5.下拉项展开时,comboxBox选中文字样式 文字离顶部8px, 左边4px
    11. "QComboBox:on{padding-top:8px; padding-left:4px;}"
    12. //6.下拉按钮样式 子控件填充方式,位位顶部靠右边,宽度15px, 左边框一个竖线,颜色darkgray, 风格solid实现,右上角和右下角度与comboxBox一样都是3px
    13. // 这条设置了,上面第2点就可以不用设置了。
    14. "QComboBox::drop-down {subcontrol-origin: padding;subcontrol-position: top right;width: 15px; border-left-width: 1px; border-left-color: darkgray; border-left-style: solid; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}"
    15. //7.下面按钮悬浮样式 鼠标悬浮在右边的下拉按钮是变成红色
    16. "QComboBox::drop-down:hover{background: #ff0000;}"
    17. //8.下拉箭头样式
    18. "QComboBox::down-arrow {image:url(:/image/com_drop_down.png);}"
    19. //9.下拉列表展开时下拉箭头样式, 下拉时箭头距顶部5px, 左边5px
    20. "QComboBox::down-arrow:on{top:5px;left:5px;}"
    21. );
    22. ui->comboBox_2->setStyleSheet(comboxStyle2);

    这里下位列表没有样式,因此还需要为下载列表设置样式

    属性意思
    QComboBox QAbstractItemView列表项基本样式
    QListView:item每个项的样式
    QListView:item:hover鼠标悬浮项的样式
    QListView:item:disabled禁用项的样式
    QComboBox QAbstractScrollArea QScrollBar:vertical列表项滚动条样式
    QComboBox QAbstractScrollArea QScrollBar::handle:vertical列表项滚动条滑块样式
    QComboBox QAbstractScrollArea QScrollBar::handle:vertical:hover列表项滚动条滑块悬浮样式

    下面是完整的代码:

    1. #ifndef MAINWINDOW_H
    2. #define MAINWINDOW_H
    3. #include
    4. QT_BEGIN_NAMESPACE
    5. namespace Ui { class MainWindow; }
    6. QT_END_NAMESPACE
    7. class MainWindow : public QMainWindow
    8. {
    9. Q_OBJECT
    10. public:
    11. MainWindow(QWidget *parent = nullptr);
    12. ~MainWindow();
    13. void initView();
    14. void initData();
    15. private:
    16. Ui::MainWindow *ui;
    17. };
    18. #endif // MAINWINDOW_H
    1. #include "mainwindow.h"
    2. #include "ui_mainwindow.h"
    3. #include
    4. #include
    5. MainWindow::MainWindow(QWidget *parent)
    6. : QMainWindow(parent)
    7. , ui(new Ui::MainWindow)
    8. {
    9. ui->setupUi(this);
    10. initView();
    11. initData();
    12. }
    13. MainWindow::~MainWindow()
    14. {
    15. delete ui;
    16. }
    17. void MainWindow::initView()
    18. {
    19. QString comboxStyle = QString(
    20. "QComboBox{background:#FFFF00;border:1px solid #E4E2E2;padding: 1px 18px 1px 20px;border-radius:8px;color:#2F89FC;}"//未下拉时,QComboBox的样式
    21. "QComboBox:on{background:#00FF00;color:#2F00FC;}" // 点击QComboBox后的已选中项的样式
    22. "QComboBox QAbstractItemView {border:1px solid yellow;color:green;background-color:#FFFFFF;selection-color:blue;selection-background-color:red;}"//下拉展开后,整个下拉窗体样式
    23. "QComboBox QAbstractScrollArea QScrollBar:vertical{width: 10px;background-color: #f1ee04;}"
    24. "QComboBox QAbstractScrollArea QScrollBar::handle:vertical{border-radius:5px;background:rgb(255, 68, 20);}"
    25. "QComboBox QAbstractScrollArea QScrollBar::handle:vertical:hover{background:rgb(0, 255, 20);}"
    26. "QComboBox::drop-down {background:#FFFFFF;border-radius:8px;outline:none;}"
    27. "QComboBox::drop-down:hover{background: #ff0000;}" //上内边距、右内边距、下内边距、左内边距
    28. "QComboBox::down-arrow {width:22px;height:22px;background:transparent;padding:0px 20px 0px 0px;image:url(:/image/com_drop_down.png);}"
    29. "QComboBox::down-arrow:on{image: url(:/image/com_drop_arrow.png);}"
    30. );
    31. //padding //上内边距、右内边距、下内边距、左内边距
    32. ui->comboBox->setStyleSheet(comboxStyle);
    33. QString comboxStyle2 = QString(
    34. //1.界面上comboxBox样式 红色边框,圆角为3, 文字右边距边框13px, 最小宽度60px
    35. "QComboBox{border: 1px solid red;border-radius:3px;padding: 1px 18px 1px 13px;min-width: 60px;}"
    36. //2.右边可选择按钮 黄色
    37. "QComboBox:editable {background: yellow;}"
    38. //3.不可编辑或下拉时,comboxBox显示的背景状态
    39. "QComboBox:!editable, QComboBox::drop-down:editable {background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #E1E1E1, stop: 0.4 #DDDDDD, stop: 0.5 #D8D8D8, stop: 1.0 #D3D3D3);}"
    40. //4.下拉项展开时,comboxBox显示的背景状态
    41. "QComboBox:!editable:on, QComboBox::drop-down:editable:on {background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #D3D3D3, stop: 0.4 #666666, stop: 0.5 #DDDDDD, stop: 1.0 #E1E1E1);}"
    42. //5.下拉项展开时,comboxBox选中文字样式 文字离顶部8px, 左边4px
    43. "QComboBox:on{padding-top:8px; padding-left:4px;}"
    44. //6.下拉按钮样式 子控件填充方式,位位顶部靠右边,宽度15px, 左边框一个竖线,颜色darkgray, 风格solid实现,右上角和右下角度与comboxBox一样都是3px
    45. // 这条设置了,上面第2点就可以不用设置了。
    46. "QComboBox::drop-down {subcontrol-origin: padding;subcontrol-position: top right;width: 15px; border-left-width: 1px; border-left-color: darkgray; border-left-style: solid; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}"
    47. //7.下面按钮悬浮样式 鼠标悬浮在右边的下拉按钮是变成红色
    48. "QComboBox::drop-down:hover{background: #ff0000;}"
    49. //8.下拉箭头样式
    50. "QComboBox::down-arrow {image:url(:/image/com_drop_down.png);}"
    51. //9.下拉列表展开时下拉箭头样式, 下拉时箭头距顶部5px, 左边5px
    52. "QComboBox::down-arrow:on{top:5px;left:5px;}"
    53. );
    54. ui->comboBox_2->setStyleSheet(comboxStyle2);
    55. QString itemStyle2 = QString(
    56. "QComboBox QAbstractItemView {"
    57. "border-radius:8px;padding-left:10px;padding-right:1px;"
    58. "margin-top:10px;" //下拉框与ComboxBox之间的距离
    59. "outline: 1px solid #ffffff;" //选中项外边框
    60. "border: 1px solid #f1f1f1;" //整个下拉窗体的边框
    61. "color:#333333;"
    62. "background-color:white;"
    63. "selection-color:red;"
    64. "selection-background-color:#2F89FC;}"
    65. );
    66. QString itemStyle1 = QString(
    67. "QComboBox QAbstractItemView {"
    68. "border-radius:3px;padding-left:20px;padding-right:10px;"
    69. "margin-top:10px;" //下拉框与ComboxBox之间的距离
    70. "outline: 1px solid #000000;" //选中项外边框
    71. "border: 1px solid yellow;" //整个下拉窗体的边框
    72. "color: red;" //文字颜色
    73. "background-color:#999999;" //整个下拉窗体的背景色
    74. "selection-color:blue;" //下拉框选中项字体颜色
    75. "selection-background-color:#333333;}" //下拉框选中项的背景色
    76. );
    77. //下拉展开后,整个下拉窗体样式
    78. QString itemStyle = QString(//padding-left:10px;padding-right:1px;
    79. "QComboBox QAbstractItemView {"
    80. "border-radius:8px;padding-left:10px;"
    81. //"margin-left:10px;" //下拉框与ComboxBox之间的距离
    82. "outline: 1px solid #ffffff;" //选中项外边框
    83. //"border: 1px solid #f1f1f1;" //整个下拉窗体的边框
    84. "background-color:white;}"
    85. );
    86. QString comboxStyle3 = QString(
    87. //1.界面上comboxBox样式 红色边框,圆角为3, 文字右边距边框13px, 最小宽度60px
    88. "QComboBox{border: 1px solid red;border-radius:8px;padding: 1px 18px 1px 13px;min-width: 60px;}"
    89. //2.不可编辑或下拉时,comboxBox显示的背景状态
    90. "QComboBox:!editable, QComboBox::drop-down:editable {background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #E1E1E1, stop: 0.4 #DDDDDD, stop: 0.5 #D8D8D8, stop: 1.0 #D3D3D3);}"
    91. //3.下拉项展开时,comboxBox显示的背景状态
    92. "QComboBox:!editable:on, QComboBox::drop-down:editable:on {background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #D3D3D3, stop: 0.4 #666666, stop: 0.5 #DDDDDD, stop: 1.0 #E1E1E1);}"
    93. //4.下拉项展开时,comboxBox选中文字样式 文字离顶部8px, 左边4px
    94. "QComboBox:on{padding-top:8px; padding-left:4px;}"
    95. //5. 下接按钮背景透明,圆角与comboBox一样,无线框, 类似于隐藏按钮
    96. "QComboBox::drop-down {background:transparent;border-radius:3px;outline:none;}"
    97. //6.下拉箭头样式 箭头宽22px,高22px,背景透明,距右边20px,箭头图url
    98. "QComboBox::down-arrow {width:22px;height:22px;background:transparent;padding:0px 20px 0px 0px;image:url(:/image/com_drop_down.png);}"
    99. //7.下拉列表展开时下拉箭头样式
    100. "QComboBox::down-arrow:on{image: url(:/image/com_drop_arrow.png);}"
    101. //8.下载拉列的样式
    102. );
    103. ui->comboBox_3->setStyleSheet(comboxStyle3 + itemStyle);
    104. //下接列表的滚动条样式
    105. QString scrollStyle = QString(
    106. //"QComboBox QAbstractItemView::item{height:28px;margin-left:10px;padding-left:10px;}" //item项目的高度设置
    107. "QComboBox QAbstractScrollArea QScrollBar:vertical{width: 10px;background-color: #f1ee04;}"
    108. "QComboBox QAbstractScrollArea QScrollBar::handle:vertical{border-radius:5px;background:rgb(255, 68, 20);}"
    109. "QComboBox QAbstractScrollArea QScrollBar::handle:vertical:hover{background:rgb(0, 255, 20);}"
    110. );
    111. QListView *ListView = new QListView;
    112. ui->comboBox_4->setView(ListView);//必须设置
    113. //ui->comboBox_4->setEditable(true);
    114. ui->comboBox_4->setMaxVisibleItems(5);//设置下拉框当前页显示item个数。
    115. //下拉框设置圆角样式后,边角会存在阴影问题,这是Popup问题导致的,解决办法可以通过解决Popup来解决,也可以通过设置QComboBox本身属性。
    116. ui->comboBox_4->view()->window()->setWindowFlags(Qt::Popup | Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint);
    117. ui->comboBox_4->view()->window()->setAttribute(Qt::WA_TranslucentBackground);
    118. //选中项的文字颜色及背景只能在QListView::item里设置,否则无效 padding-left:10px; 有白色边框
    119. QString listStyle = QString("QListView:item{height:30px;background-color:white;color:#333333;border-radius:8px;border:none;}"
    120. "QListView:item:hover{height:30px;background-color:#2F89FC;color:white;border-radius:8px;border:0px solid #f1f1f1;;}"
    121. "QListView:item:disabled{background-color:rgba(104,121,151,90%);color:#a0a0a0;border:0px solid #aaaaaa;}");
    122. QString comboxStyle4 = comboxStyle3 + itemStyle + scrollStyle + listStyle;
    123. ui->comboBox_4->setStyleSheet(comboxStyle4);
    124. //ListView->setStyleSheet(listStyle);
    125. ListView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    126. }
    127. void MainWindow::initData()
    128. {
    129. QIcon icon;
    130. //icon.addFile(":/image/icon24.png");
    131. ui->comboBox->addItem(icon, "bilibili---1");
    132. ui->comboBox->addItem(icon, "bilibili---2");
    133. ui->comboBox->addItem(icon, "bilibili---3");
    134. ui->comboBox->addItem(icon, "bilibili---4");
    135. ui->comboBox->addItem(icon, "bilibili---5");
    136. ui->comboBox->addItem(icon, "bilibili---6");
    137. ui->comboBox->addItem(icon, "bilibili---7");
    138. ui->comboBox->addItem(icon, "bilibili---8");
    139. ui->comboBox->addItem(icon, "bilibili---9");
    140. ui->comboBox->addItem(icon, "bilibili---11");
    141. ui->comboBox->addItem(icon, "bilibili---12");
    142. ui->comboBox->addItem(icon, "bilibili---13");
    143. ui->comboBox->addItem(icon, "bilibili---14");
    144. ui->comboBox->addItem(icon, "bilibili---15");
    145. ui->comboBox->addItem(icon, "bilibili---16");
    146. ui->comboBox->addItem(icon, "bilibili---17");
    147. ui->comboBox->addItem(icon, "bilibili---18");
    148. ui->comboBox->addItem(icon, "bilibili---19");
    149. QStringList szList{QStringLiteral("龙华"), QStringLiteral("龙岗"), QStringLiteral("福田"), QStringLiteral("宝安"), QStringLiteral("罗湖"), QStringLiteral("坪山"), QStringLiteral("大鹏"), QStringLiteral("光明")};
    150. QStringList cityList{QStringLiteral("昆明"), QStringLiteral("大理"), QStringLiteral("保山"), QStringLiteral("丽江"), QStringLiteral("玉溪"), QStringLiteral("曲靖"), QStringLiteral("昭通"), QStringLiteral("普洱")};
    151. QStringList proviceList{QStringLiteral("云南"), QStringLiteral("四川"), QStringLiteral("西藏"), QStringLiteral("新疆"), QStringLiteral("青海"), QStringLiteral("宁夏"), QStringLiteral("陕西"), QStringLiteral("山西"),
    152. QStringLiteral("湖南"), QStringLiteral("湖北"), QStringLiteral("广东"), QStringLiteral("广西"), QStringLiteral("福建"), QStringLiteral("浙江"), QStringLiteral("江西"), QStringLiteral("上海")};
    153. ui->comboBox_2->addItems(szList);
    154. ui->comboBox_3->addItems(cityList);
    155. ui->comboBox_4->addItems(proviceList);
    156. }

    参考:

    https://doc.qt.io/qt-5/stylesheet-examples.html
    https://doc.qt.io/qt-5/stylesheet-reference.html
    https://blog.csdn.net/no_say_you_know/article/details/125335417
    https://blog.csdn.net/qq_36651243/article/details/100765496

  • 相关阅读:
    Qlib股票数据获取与查看(Qlib学习1)
    web前端期末大作业——餐品后台管理系统(html+css+javascript)
    【每日一题】统计范围内的元音字符串数
    理解网络通信的基础:OSI七层模型与TCP/IP五层模型
    2020年12月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试
    SQL 左连接 LEFT JOIN 关键字||SQL右连接 RIGHT JOIN 关键字
    16-bit 内置基准模数转换器:MS1100
    Matlab save colormap
    (附源码)ssm考生评分系统 毕业设计 071114
    5.36 BCC工具之ucalls.py解读
  • 原文地址:https://blog.csdn.net/chenyijun/article/details/133386057