QT样式表规则及使用详解

  • Post author:
  • Post category:其他




1 样式表的语法规则

简单来说,样式规则由选择器和声明组成。选择器指定哪些小部件受规则影响;声明指定应该在小部件上设置哪些属性。

如:

QPushButton { color : red }。

其中QPushButton就是选择器,’{ color : red }’是声明部分。 color就是属性,red就是指定给该属性的值。

也可以给多种控件同时设置样式,逗号隔开:

(给父窗口设置样式,子空间会继承父窗口的样式,相当于全局设置)

QPushButton, QLineEdit, QComboBox {color: red}

声明多个属性,分号分隔:

QPushButton { color: red; background-color: white }

为名为btnStyle的控件设置样式:

#btnStyle{ color: red; }

伪状态以冒号(:)作为分隔 紧跟着选择器:

QPushButton:!hover { color: white } 表示当鼠标不悬停在按钮上时颜色为白色

对一些复杂的部件修改样式,可能需要访问它们的子控件如QScrollBar的handle,QCheckBox的indicator等:

QScrollBar::handle:vertical
{
    width:8px;
    background:rgba(0,0,0,25%);
    border-radius:4px;   /* 滚动条两端变成椭圆*/
    min-height:20;
}



2 使用样式表的三种方法



2.1 Qt Designer 中直接添加样式

优点:通过这种方法我们对于设置完样式可以立马显示出效果(不需要编译再运行),也可以直观检查出当前样式是否编写错误。同时Qt Designer也可以帮助我们快速添加样式,见下图。在不编译不运行的情况下,我们可以用

Ctrl+r

直观地查看效果。

在这里插入图片描述

在这里插入图片描述

缺点:样式较多时,可能会显得比较凌乱。只能对QTDesiner上放置的控件设置样式,有局限性。



2.2 在代码中添加样式

直接调用控件的setStyleSheet方法,把2.1样式表中的内容写到“ ”内即可。

// 对单个控件;
ui.pushButton->setStyleSheet("QPushButton{border-radius:5px;background:rgb(150, 190, 60);color:red;font-size:15px;}")
// 对整个界面(包括界面上所有的控件)
this->setStyleSheet("QPushButton{border-radius:5px;background:rgb(150, 190, 60);color:red;}")

优点:方法2.1、2.3只能对QTDesigner上放置的控件设置样式。而代码设置可以对自己new出的控件设置样式,更加灵活,方便对自定义控件、组合控件设置样式。例如

pCheckBoxShowPWD = new QCheckBox(this);
pCheckBoxShowPWD>setStyleSheet("QCheckBox{width:24px;height:24px;});

缺点:不利于直观查看样式效果,样式表复杂造成程序冗长。



2.3 将样式写在qss文件中

建立一个MyStyle.qss文件,将样式写在文件中,通过读取文件的方式设置样式。

优点:界面样式较复杂时,我们在文件中编写样式,内容比较清晰,同时也便于修改。可以为界面换整套皮肤。

缺点:一般样式表文件都会加载到程序qrc资源文件中,所以这里需要单独加载一个文件,一起打包进exe文件中。

如何读取qss文件?

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->loadStyleSheet(":/qss/myStyleSheet.qss");
}
void MainWindow::loadStyleSheet(const QString &styleSheetFile)
{
    QFile file(styleSheetFile);
    file.open(QFile::ReadOnly);
    if (file.isOpen())
    {
        QString styleSheet = this->styleSheet();
        styleSheet += QLatin1String(file.readAll());//读取样式表文件
        this->setStyleSheet(styleSheet);//把文件内容传参
        file.close();
    }
    else
    {
        qDebug() << "qss file.open failed";
    }
}



版权声明:本文为weixin_44084447原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。