Qt之QSS基础


前言

  我们平时做的项目,应用程序界面非常美观,看起来十分炫酷,它是怎么实现的呢?本篇简单介绍QSS的使用,想要搞清楚原理,可以参考二狗大佬的博客。
  QSS用于修改界面外观,如果通过QSS文件的方式加载,直接修改QSS文件就能看到效果变化,不需要编译。QSS与CSS十分相似。

一、基本语法

  以QLabel为例,QSS实现如下:

QLabel {
    /* 相当于 font: bold 50px "Snell Roundhand"; */
    font-size: 50px;
    font-weight: bold;
    font-family: "Snell Roundhand";

    /* 文本的颜色 */
    color: white;

    /* 相当于 background: lightgray url(:/resources/horizontal-add-line.png); */

    background-color: lightgray;
    background-image: url(:/resources/horizontal-add-line.png);

    /* 还能使用渐变 */
    background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
                      stop: 0 #FFFFFF, stop: 1 #BB000000);

    /* 相当于 border: 5px solid gray; */
    border-width: 5px;
    border-color: gray;
    border-style: solid;

    /* 边框圆角 */
    border-radius: 10px;

    padding: 5px;
    margin: 10px;
}

1、字体

使用font设置字体。font的语法如下:

font: [font-style] [font-variant] [font-weight] [font-size] [font-family]

/* 按顺序设置,可以忽略其中某些值,例如:*/
font: italic bold 12px arial, sans-serif;

如果字体名字有空格则用双引号引起来,多个字体名字间用逗号分隔,如果第一个字体找不到则用第二个,依此类推。

2、文本颜色

使用color设置文本颜色。可以直接写颜色,如:white;可以写rgb颜色数值,如:rgb(2,2,2) ;也可以写16进制颜色信息,如:#00FF00

3、背景

使用background设置背景,可以设置如下属性:

  • background-color
  • background-position
  • background-repeat
  • background-origin
  • background-clip
  • background-attachment
  • background-image

比如:

background: lightgray url(:/resources/horizontal-add-line.png);

其中url的路径,可以是资源文件路径(:/开头)、绝对路径和相对路径。
background-repeat,用于设置重复,可选值如下:

  • repeat-x:水平方向重复
  • repeat-y:垂直方向重复
  • no-repeat:不重复

background-position,用于设置选取的素材位置,可选值如下:

  • top left
  • top center
  • top right
  • center left
  • center center
  • center right
  • bottom left
  • bottom center
  • bottom right

background-attachment,用于设置跟随滚动条滚动,可选值如下:

  • scroll:背景随滚动条滚动
  • fixed:背景不随滚动条滚动

background-color用于设置背景颜色,可以直接写入颜色,也支持渐变,渐变可选值如下:

  • qlineargradient 线性渐变
  • qradialgradient 辐射渐变
  • qconicalgradient 角度渐变

比如:

/*
x1: 0, y1: 0,渐变的开始位置,为 border rectangle 的左上角(请参考盒子模型)
x2: 0, y2: 1,渐变的开始位置,为 border rectangle 的左下角
stop: 0.1 #FF0000,在 0.0 处渐变的颜色为 #FF0000
stop: 0.6 #00FF00,在 0.6 处渐变的颜色为 #00FF00
stop: 1.0 #0000FF,在 1.0 处渐变的颜色为 #0000FF
*/
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
                        stop: 0.1 #FF0000,
                        stop: 0.6 #00FF00,
                        stop: 1.0 #0000FF);

渐变的坐标不是用具体像素表示,而是把渐变的坐标最小值定义为0,最大值定义为1,称为Normalization。其实,就是用比例表示,开始处用0表示,结束处用1表示,按比例计算实际的像素坐标。这样,就不需要关心像素坐标范围的具体值,不会因widget大小变化而变化。

除了使用background-image外,border-image也可以用于设置背景,区别在于,背景图和控件一样大时使用background-image,当不一样大时使用border-image。设置border-image,就一定要同时设置 border-width。用法如下:

border-width: 12px 12px 12px 12px;
border-image: url(:/img/round-button.png) 12 12 12 12 repeat stretch;

参数分别为:
背景图路径
背景图中最上面12px高的图像填充到widget的border-top
背景图中最右边12px宽的图像填充到widget的border-right
背景图中最下边12px高的图像填充到widget的border-bottom
背景图中最左边12px宽的图像填充到widget的border-left
水平方向的填充
垂直方向的填充。

后两个参数,可选值为:

  • stretch:用拉伸的方式来填充边框背景图
  • repeat:用平铺的方式填充边框背景图,当图片超过边界时则截断
  • round:用平铺的方式填充边框背景图,图片会根据边框尺寸动态调整图片大小直至正好可以铺满整个边框

4、边框

使用border设置边框,用法如下:

border: border-width border-style border-color

border-style,边框风格,可选值如下:

  • solid 实线边框
  • dotted 点状边框
  • none 无边框
  • dashed 虚线
  • double 双线
  • groove 3D凹槽边框
  • ridge 3D垄状边框
  • inset 上光源3D
  • outset 下光源3D

使用border-radius设置边框圆角,但是如果给定的半径大于对应边的一半,圆角就没有效果了,在 CSS 里没有这个问题。

遗憾的是,QSS不支持阴影。

5、文本居中、对齐

widget及其子类中使用宏Q_PROPERTY 定义的 WRITE 函数可以在 QSS 中访问,我们可以通过这种方式实现某些效果,比如:

  • 设置文本居中:qproperty-alignment: AlignCenter,此外text-align不支持QLabel
  • 设置文本:qproperty-text: ‘It is amazing’
  • 设置对齐方式:
qproperty-alignment: 'AlignCenter'
qproperty-alignment: 'AlignBottom | AlignRight'

可以使用该方式实现很多效果,但qproperty-xxx 也不是万能的,在 :hover,:pressed 等伪类选择器中不生效。

二、加载QSS

1、widget对象调用setStyleSheet() 函数

QSS作用域是widget自己和它的所有子widget,如下:

QFrame *topFrame = new QFrame();
topFrame->setFrameShape(QFrame::StyledPanel);
topFrame->setFrameShadow(QFrame::Raised);
QPushButton *topButton = new QPushButton("Top Button");
QVBoxLayout *topLayout = new QVBoxLayout();
topLayout->addWidget(topButton);
topFrame->setLayout(topLayout);

QString qss = "QFrame {"
                  "    background: #AAA;"
                  "    border: 2px dashed gray;"
                  "}"
                  "QPushButton {"
                  "    font-size: 20px;"
                  "    padding: 5px 20px;"
                  "    color: black;"
                  "    border: 4px solid gray;"
                  "    background-color: rgb(230, 250, 250);"
                  "}";

 // 加载 QSS
 topFrame->setStyleSheet(qss);

2、QApplication 的对象调用setStyleSheet() 函数

QSS作用域是整个程序里面的所有widget,如下:

QApplication app(argc, argv);
app.setStyleSheet(qss)

3、Qt Designer中的Change styleSheet…

QSS作用域是widget自己和它的所有子widget,与方式1相同,只是不需要自己编写具体代码,打开ui文件生成的代码,可以看到里面也是调用的setStyleSheet() 函数。

4、从文件中加载

如果在代码或设计师里面设置QSS,则每次修改,都需要重新编译,才能生效。所以,实际项目中,QSS的设置一般都写在文件中,代码中只调用setStyleSheet()函数。

void DlgFirst::loadUI()
{
    QString filename = QString("%1/TmUI/First/dlgfirst.css").arg(g_strExeRoot);

    QFile fileSkin(filename);
    if(fileSkin.open(QIODevice::ReadOnly))
    {
        QString strSkin = QString::fromUtf8(fileSkin.readAll());
        strSkin = strSkin.replace("@", g_CfgPath);
        strSkin = strSkin.replace("~", g_strExeRoot);
        this->setStyleSheet(strSkin);
        fileSkin.close();
    }
}
  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Qt Creator QSSQt Creator用于样式表设计和实现的。它是一种基于CSS的形式语言,用于创建Qt应用程序的用户界面。Qt Creator QSS语言为设计人员提供了更多的创作空间,并提供了在Qt应用程序中更多的自定义设计选项。 Qt Creator QSS能够在不编写代码的情况下创建和定制控件的样式。它允许设计人员使用简单和有意义的语法来控制界面的外观和风格。Qt Creator QSS允许开发人员自定义应用程序的样式表,并以此为基础为用户界面的设计添加独特的风格和特色。例如,制作独特的背景和按钮样式可以让应用程序人性化。 通过Qt Creator QSS,开发人员可以更容易地设计用户界面,改善应用程序的功能和外观。QT Creator QSS不仅为用户提供了更多的自由定制,还让他们更方便快速的实现不同设备的响应式特性和局限性。 综上所述,Qt Creator QSS为开发人员提供了更多的选择和更广泛的自定义选项,这使得他们可以更好的控制他们的应用程序的外观和特色,从而为用户提供更好的体验。而且通过内置的“预览”功能,设计人员可以立即看到他们的更改结果,使得设计/开发更加高效。 ### 回答2: Qt Creator是一种常用的跨平台开发工具,它允许开发人员创建使用C++编程语言的GUI应用程序。Qt Style Sheets(QSS)是一种基于CSS风格的技术,它可以用于自定义Qt应用程序的UI元素。在Qt Creator中,可以使用QSS来定制应用程序的外观和样式。 在Qt Creator中,可以通过创建.qss文件来定义QSS样式。在这个文件中,可以使用CSS语法来定义各种Qt应用程序的UI元素的样式,如窗口、标签、按钮等。例如,可以使用以下代码来为应用程序中所有按钮定义背景颜色和字体颜色: QPushButton { background-color: red; color: white; } 还可以使用QSS来定义特定状态下的UI元素样式。例如,可以使用以下代码来为应用程序中所有被禁用的按钮定义不同的颜色: QPushButton:disabled { background-color: gray; color: white; } 在Qt Creator中,可以通过加载.qss文件来应用定义的QSS样式。可以将应用程序的样式与QSS相结合,实现自定义风格和外观。通过使用Qt Creator和QSS,开发人员可以快速优雅地实现跨平台GUI应用程序。 ### 回答3: Qt Creator QSS是指Qt Creator的样式表(Qt Style Sheet)设置,它可以自定义Qt Creator界面的外观和风格。QSS可以改变Qt Creator中各个组件的颜色、字体、边框、尺寸等属性,让Qt Creator满足个人偏好和需求。QSS具有易用、灵活、强大的特点,在Qt Creator中可以快速实现界面定制化。 QSS是一种基于CSS语法的样式表语言,它的语法清晰简单,易于理解和修改。Qt Creator中可以通过“文件-新建文件-Qt-Qt Style Sheet File”来新建QSS文件,并可以通过“工具-选项-界面-样式表”来加载和设置样式表。QSS的设置可以针对全局,也可以针对单个组件。例如,可以设置按钮的hover状态下的背景颜色和字体颜色,也可以设置侧边栏的颜色和边框样式等。此外,Qt Creator提供了一些预设的常用QSS样式表,如Dark样式和Flat Light样式,用户可以选择直接使用或自行定制。 总之,Qt Creator QSS功能丰富强大,可以帮助用户定制出符合自己习惯和审美的IDE界面,提高工作效率和舒适度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码的雪糕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值