• QT学习_07_样式表的初步学习


    目录

    1 样式表语法基础

    2 举例说明

    3 方箱模型

    4 全局/局部的设定

     5 背景图片设定

    6 处理伪状态

    7 处理子控件

    后续:


    1 样式表语法基础

    Qwidget::setStyleSheet()或者QApplication setStyleSheet()
    selector {attribute: value}

    选择器  {属性: 值}

    比如:

    QLabel {color:red; …}

    也可以同时设定多个比如

    1. QCheckBox, QComboBox, QLabel {
    2. color:red;
    3. background-color: white;
    4. font:bold:
    5. }

    2 举例说明

    1. #include "widget.h"
    2. #include "ui_widget.h"
    3. Widget::Widget(QWidget *parent)
    4. : QWidget(parent)
    5. , ui(new Ui::Widget)
    6. {
    7. ui->setupUi(this);
    8. ui->label->setStyleSheet("QLabel{"
    9. "color:red;"
    10. "background-color:rgb(0,0,255);"
    11. "}");
    12. }
    13. Widget::~Widget()
    14. {
    15. delete ui;
    16. }

    运行结果

    3 方箱模型

    下面一张图就能说明

    4 全局/局部的设定

    话不多说,看代码注释和运行结果

    1. #include "widget.h"
    2. #include "ui_widget.h"
    3. Widget::Widget(QWidget *parent)
    4. : QWidget(parent)
    5. , ui(new Ui::Widget)
    6. {
    7. ui->setupUi(this);
    8. // 全局有效
    9. this->setStyleSheet("QLabel{"
    10. "color:red;"
    11. "background-color:rgb(0,0,255);"
    12. "}");
    13. // 局部修改
    14. ui->label->setStyleSheet("QLabel{"
    15. "color:white;"
    16. "background-color:black;"
    17. "}");
    18. }
    19. Widget::~Widget()
    20. {
    21. delete ui;
    22. }

    运行结果

     5 背景图片设定

    1. #include "widget.h"
    2. #include "ui_widget.h"
    3. Widget::Widget(QWidget *parent)
    4. : QWidget(parent)
    5. , ui(new Ui::Widget)
    6. {
    7. ui->setupUi(this);
    8. // 全局有效
    9. this->setStyleSheet("QLabel{"
    10. "color:red;"
    11. "background-color:rgb(0,0,255);"
    12. "}");
    13. // 局部修改
    14. /*
    15. // background-image:url(:/img/Image/Image1.jpg) 显示不全,复制平铺
    16. ui->label->setStyleSheet("QLabel{"
    17. "color:white;"
    18. "background-color:black;"
    19. "background-image:url(:/img/Image/Image1.jpg)"
    20. "}");
    21. */
    22. // "border-image:url(:/img/Image/Image1.jpg)" 可伸缩
    23. ui->label->setStyleSheet("QLabel{"
    24. "color:white;"
    25. "border-image:url(:/img/Image/Image1.jpg)"
    26. "}");
    27. // "border-image:url(:/img/Image/Image1.jpg) 100 100 100 100 strech strech" 可裁剪
    28. /*
    29. ui->label->setStyleSheet("QLabel{"
    30. "color:white;"
    31. "border-image:url(:/img/Image/Image1.jpg) 100 100 100 100 strech strech"
    32. "}");
    33. */
    34. }
    35. Widget::~Widget()
    36. {
    37. delete ui;
    38. }

    运行结果

    6 处理伪状态

    控件有各种状态, 当控件的状态改变之后,可以同时修改它的Style

    1. #include "widget.h"
    2. #include "ui_widget.h"
    3. Widget::Widget(QWidget *parent)
    4. : QWidget(parent)
    5. , ui(new Ui::Widget)
    6. {
    7. ui->setupUi(this);
    8. ui->pushButton->setStyleSheet("QPushButton {"
    9. "border: 2px outset green;"
    10. "}"
    11. "QPushButton:hover {"
    12. "border: 2px outset red;"
    13. "}"
    14. "QPushButton:pressed {"
    15. "border: 2px outset black;"
    16. "}"
    17. );
    18. }
    19. Widget::~Widget()
    20. {
    21. delete ui;
    22. }

     运行结果

    鼠标放上去后

    按下鼠标后

    注意:各种控件都有各种伪状态,如何去找到伪状态呢?

    打开QT的帮助文档:搜索 setStyleSheet👉Qt Style Sheets👉 Qt Style Sheets Reference👉List of Pseudo-States

    里面有各种伪状态的介绍。

    7 处理子控件

    子控件,比如下拉菜单那个三角形就是下拉菜单的一个子控件。 你如果想要单独修改它的一些style。 那就需要用子控件的方式。

    注意子控件的样式修改是两个:, 伪状态的样式修改是一个:

    另外,我们对于子控件的伪状态也是可以指定特定的样式的

    1. #include "widget.h"
    2. #include "ui_widget.h"
    3. Widget::Widget(QWidget *parent)
    4. : QWidget(parent)
    5. , ui(new Ui::Widget)
    6. {
    7. ui->setupUi(this);
    8. ui->pushButton->setStyleSheet("QPushButton {"
    9. "border: 2px outset green;"
    10. "}"
    11. "QPushButton:hover {"
    12. "border: 2px outset red;"
    13. "}"
    14. "QPushButton:pressed {"
    15. "border: 2px outset black;"
    16. "}"
    17. );
    18. ui->comboBox->setStyleSheet("QComboBox::drop-down {"
    19. "background-color:red;"
    20. "}"
    21. "QComboBox::drop-down:hover {"
    22. "background-color:green;"
    23. "}"
    24. );
    25. }
    26. Widget::~Widget()
    27. {
    28. delete ui;
    29. }

    运行结果:

    正常的下拉菜单控件的长这样子的

    当我添加了子控件样式代码后

    当我添加了子控件的伪状态样式代码后,

    注意:很多控件都包含子控件,那我怎么知道这控件它有哪些子控件可以单独修改style呢?

    打开QT的帮助文档:搜索 setStyleSheet👉Qt Style Sheets👉 Qt Style Sheets Reference👉 List of Sub-Controls

    里面有各种子控件的介绍。

    后续:

    样式表肯定不能直接这么写在构造函数里面,那么多样式表看着心就堵,所以下一篇文章考虑如何把样式表用单独的文件,或者多个不同的文件来写。参考链接:Qt学习_08_用独立的文件存放样式表_样式表文件-CSDN博客

    感谢您的阅读,欢迎留言讨论、收藏、点赞、分享。 

  • 相关阅读:
    QML使用C++ model(基本用法)
    恶意代码防范技术笔记(三)
    Java编程规范(命名规则),Java程序的运行过程(执行流程)分析
    易基因技术推介|m1A RNA甲基化测序(MeRIP-seq/m1A-seq)
    【数据库应用-1】——CDA
    GitHub上标星120k的Java进阶面试教程等!(建议收藏)
    python面试题(36~50)
    Pytorch 入门
    STM32,我想看单片机上的外设时钟,我怎么看?
    stm32----用状态机判断单双击
  • 原文地址:https://blog.csdn.net/heqiunong/article/details/127649024