Qt——QSS

目录

基本语法

样式影响范围

样式和代码分离

第一种方式

第二种方式

QSS选择器

一般选择器

子控件选择器

伪类选择器

[QSS盒子模型样式设置(Box Model)](#QSS盒子模型样式设置(Box Model))

有哪些样式可以设置

一些控件的样式设置

给按钮设置样式

给复选框设置样式

给输入框设置样式

关于样式中的线性渐变色

给列表框设置样式

给菜单栏设置样式

简单设计一个登录界面​


基本语法

基本语法:

选择器 { 属性名:属性值;属性名:属性值;...}

使用控件的setStyleSheet方法就可以把样式设置进去:

cpp 复制代码
this->setStyleSheet("QPushButton{color:red;}QLabel{color:black;}")

样式影响范围

父控件的样式也会应用到子控件上,但不会影响到同级别的其余控件**。如果各种方式设置样式发生冲突就局部优先,例如:如果父控件样式和子控件样式冲突了以子控件为准;如果不冲突就叠加。**

QApplication表示整个客户端,也可以直接给它设置样式,表示全局样式。


样式和代码分离

样式较多的时候,如果还让样式分布在代码的各个地方,就会使得代码(样式)难以维护,因此引入样式和代码分离,这里提供两种方法。

第一种方式

创建一个qss文件并将其引入qrc文件

在qss文件中编辑样式

使用QFile读取qss文件内容,将其设置为全局样式

结果如下:

第二种方式

这种方式利用ui文件进行设置,支持实时预览,步骤如下:

选中项要设置样式的控件,右击选择改变样式表

在这个窗口编写样式

结果如下


QSS选择器

选择器就是指定某个样式应该应用到什么样的目标上**。**

一般选择器

cpp 复制代码
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    a.setStyleSheet("QPushButton,QLabel,#pushButton{color:blue;} QTextEdit{color:red}");
    MainWindow w;
    w.show();
    return a.exec();
}

子控件选择器

有些控件默认包含子控件,它们没有独立的objectname,如果要单独给他们设置样式就要用到子控件选择器。

在Qt的文档中给我们列出了选择这些子控件的使用的名称,哪些控件包含他们,我们可以进行查看:

使用上面这些名称,我们就可以选择控件中固有的子控件了:

cpp 复制代码
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    a.setStyleSheet("QComboBox::drop-down{image:url(:/down.png);}");
    MainWindow w;
    w.show();
    return a.exec();
}

伪类选择器

伪类选择器选择的不是控件本身,而是控件所处的状态**,例如:鼠标悬停在控件上,鼠标按下,等等。**

下面是常用状态:

Qt也提供给我们了查询可用状态的文档:

接下来我们来使用一下伪类选择器:

cpp 复制代码
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    a.setStyleSheet("QPushButton{color:green;}QPushButton:hover{color:red;}QPushButton:pressed{color:blue;}");
    MainWindow w;
    w.show();
    return a.exec();
}

QSS盒子模型样式设置(Box Model)

支持盒子模型的控件可以设置margin,border,padding等属性,而大多数控件都支持它。

盒子模型具体如下:

盒子模型可以设置的属性如下:

复合属性:本来是多个属性,可以通过一个属性来一起设置:

下面是使用示例:

cpp 复制代码
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QPushButton* button = new QPushButton(this);
    button->setText("按钮");
    button->setGeometry(0,0,100,100);
    
    button->setStyleSheet("QPushButton{border:5px solid red;margin:20px;padding:20px;}");
}

geometry设置了按钮的大小,设置外边距或者边框宽度的时候占用的都是按钮的大小,也就是说盒子模型的总大小是不变的(因此上面的按钮看起来比100*100要小)。


有哪些样式可以设置

Qt文档中可以查询可设置的样式,以及这些样式能够被什么控件使用:


一些控件的样式设置

给按钮设置样式

给复选框设置样式

给输入框设置样式

关于样式中的线性渐变色

渐变色的设置是通过类似于函数的语法:

qlineargradient(x1:?,y1:?,x2:?,y2:?,stop:0 ?,stop:0 ?)

?所在的位置是我们需要填入的地方

x1,x2,y1,y2的取值只有0/1:

下面我们会使用线性渐变色。

给列表框设置样式

cpp 复制代码
QListWidget::item:hover
{
background-color:qlineargradient(x1:0,y1:0,x2:1,y2:0,stop:0 rgb(255, 15, 87),stop:1 rgb(52, 89, 255));
}

QListWidget::item:selected
{
background-color:qlineargradient(x1:0,y1:0,x2:1,y2:0,stop:0 rgb(205, 255, 189),stop:1 rgb(235, 255, 144));
}

给菜单栏设置样式

cpp 复制代码
QMenuBar
{
background-color:qlineargradient(x1:0,y1:0,x2:1,y2:0,stop: 0 rgb(0, 0, 0),stop: 1 rgb(255, 6, 6));
spacing:3px;
}
QMenuBar::item
{    
	border-radius: 10px;
	border:1px solid white;
	color:white;
	background-color:transparent; 
	padding:5px 15px;
}
QMenuBar::item::selected
{
	background-color:blue;
}
QMenu::separator
{
	background-color:green;
	height:2px;
	margin:0 10px;
}
QMenu::item
{
	border:1px solid transparent;
    padding:3px 10px;
	
}
QMenu::item:selected
{
	border:1px solid red;
	
}

简单设计一个登录界面

cpp 复制代码
QFrame
{
  border-image:url(:/x.png);
}
QLineEdit
{
	background-color:rgb(152, 233, 255);
	color:red;
	border:1px solid black;
	border-radius:10px;
	padding-left:10px;
font-size:20px;
}
QCheckBox
{
	color:white;
}
QPushButton
{
	border-radius:10px;
	background-color:rgb(170, 170, 127);
	color:black;
}
QPushButton:pressed
{
	background-color:red;
}
相关推荐
ZHOUPUYU9 小时前
PHP 8.3网关优化:我用JIT将QPS提升300%的真实踩坑录
开发语言·php
寻寻觅觅☆13 小时前
东华OJ-基础题-106-大整数相加(C++)
开发语言·c++·算法
l1t13 小时前
在wsl的python 3.14.3容器中使用databend包
开发语言·数据库·python·databend
赶路人儿14 小时前
Jsoniter(java版本)使用介绍
java·开发语言
ceclar12314 小时前
C++使用format
开发语言·c++·算法
码说AI15 小时前
python快速绘制走势图对比曲线
开发语言·python
Gofarlic_OMS15 小时前
科学计算领域MATLAB许可证管理工具对比推荐
运维·开发语言·算法·matlab·自动化
星空下的月光影子15 小时前
易语言开发从入门到精通:补充篇·网络爬虫与自动化采集分析系统深度实战·HTTP/HTTPS请求·HTML/JSON解析·反爬策略·电商价格监控·新闻资讯采集
开发语言
老约家的可汗15 小时前
初识C++
开发语言·c++
wait_luky15 小时前
python作业3
开发语言·python