学习Qss--背景属性


属性即控件的具体外观样式,比如背景颜色,边框宽度等等。

注意:一个属性并不是被所有widget都支持的,要想查看什么widget支持哪些属性,或一个属性被哪些widget支持,请查看官方文档。


一、background-color

取值:Brush类型

作用:设置控件的背景颜色,默认是border之内的矩形区域,包括内边距和内容矩形。


二、background-image

取值:Url类型,格式是url(filename),filename是一个本地文件路径或Qt资源文件路径,不支持网络图片

作用:设置控件的背景图片。可以与背景颜色共存,背景图片会覆盖背景颜色,在没有被图片覆盖的区域,显示背景颜色。


三、background-repeat

取值

  • repeat-x:在水平方向上平铺
  • repeat-y:在垂直方向上平铺
  • repeat:在水平和垂直方向上都平铺,这是默认值(但是Qt好像有bug,设置了repeat反而不会平铺,不设置才平铺)
  • no-repeat:不平铺

作用:设置背景图片的平铺方式

例子:给一个QTextEdit设置背景图片,代码和效果分别如下:

QTextEdit
{
    background-color: skyblue;
    background-image: image: url(:/Image/1.png);
    background-repeat: no-repeat;/*repeat-x; repeat-y; repeat;*/
}

repeat:
在这里插入图片描述
no-repeat
在这里插入图片描述
repeat-x:

在这里插入图片描述
repeat-y:
在这里插入图片描述


四、background-position

取值

取值效果
top向上对齐
bottom向下对齐
center居中对齐
left向左对齐
right向右对齐

格式background-position: 水平对齐方式 垂直对齐方式;

这是css规定的标准顺序,而qss并为严格规定,但建议按照css的顺序写;

作用:设置背景图片的对齐方式,默认情况下向左向上对齐;

举例:水平向左垂直居中对齐,代码和效果如下:

QTextEdit
{
    background-color: skyblue;
    background-image: url(:/Image/1.png);
    background-position: left center
}

在这里插入图片描述


五、background-attachment

取值

  • scroll:滚动(默认值)
  • fixed:固定

作用:设置背景图片在带滚动条的控件(QAbstractScrollArea)中是固定在一个位置,还是随着滚动条滚动;

举例

QTextEdit
{
    background-color: skyblue;
    background-image: url(:/Image.1.png);
    background-repeat: no-repeat;/*repeat-x; repeat-y; repeat;*/ 
    background-position: right center;
    background-attachment: scroll;
}
QTextEdit
{
    background-color: skyblue;
    background-image: url(:/Image.1.png);
    background-repeat: no-repeat;/*repeat-x; repeat-y; repeat;*/ 
    background-position: right center;
    background-attachment: fixed;
}

六、background-clip

取值:

取值效果
margin外边距矩形
border边框矩形
padding内边距矩形
content内容矩形

作用:设置背景颜色覆盖的区域,默认情况下背景值覆盖内边距矩形,如果没有指定,默认值为border

举例:为了区别各矩形,我们先给QTextEdit设置边框,内边距和外边距,为了区别明显,我们将边框宽度设置大一点,代码和图片如下:

QTextEdit
{
    background-color: skyblue;
    border: 20px solid purple;
    padding: 20px;
    margin: 20px;
    background-image: url(:/Image/1.png);
    background-repeat: no-repeat;
    background-position: left top;
    background-attachment: fixed;
}

在这里插入图片描述
分别将 background-clip 属性的值设为 margin, border, padding, content, 效果图如下

margin:
在这里插入图片描述
border:
在这里插入图片描述
padding:
在这里插入图片描述
content:
在这里插入图片描述

可见,background-clip属性只对背景的渲染区域有关系,背景图片始终是靠在padding边上


七、background-origin

取值:与background-clip一样
作用:与background-position和background-image一起使用,指明背景图片的覆盖范围矩形,如果没有指定,默认为padding
举例:下面是分别设置为margin,border,padding和content的代码和效果图:

QTextEdit
{
	background-color: skyblue;
	border: 20px solid purple;
	padding: 20px;
	margin: 20px;
	background-image: url(:/Image/1.png);
	/*background-repeat: no-repeat;*/
	background-position: left top;
	background-attachment: fixed;
	background-clip: margin;
	background-origin: margin;
}

margin:
在这里插入图片描述
border:
在这里插入图片描述
padding:
在这里插入图片描述
content:
在这里插入图片描述


八、背景属性的连写格式

格式

background: color image repeat position;

在这种连写格式中,只能包含着四个属性,其他几个仍然需要单独写,而且这四个属性可以省略任何一个,最多可以省略三个,也就是最少需要保留一个,即属性值不能为空。另外让人比较迷惑的是,在这种连写方式中,repeat确实是平铺了图片,而单独写时,它又是不平铺的。
举例

QTextEdit
{
	border: 20px solid purple;
	padding: 20px;
	margin: 20px;
	background: skyblue url(:/Image/1.png) repeat left top;
}
<think>我们正在讨论Qt样式表(QSS)的学习方法。根据用户提供的引用和之前的问题,我们需要系统地介绍如何学习QSS的编写与使用。 引用[1]提到QSSQt提供的自定义控件外观的机制,参考了CSS但功能较弱。引用[2]则提到了QSS的各种使用方式(从直接设置到资源文件管理)。引用[3]提到了QSS冲突的解决规则(自身样式表优先于继承样式表)。引用[4]是一个测试demo的代码片段,展示了如何使用各种控件。 因此,我们的回答应该涵盖以下方面: 1. QSS基础语法(选择器、声明块等) 2. QSS的常用属性和选择器 3. QSS的加载方式(代码设置、文件加载、资源文件等) 4. 冲突解决规则(优先级) 5. 实践建议(如何练习) 同时,我们之前已经详细介绍了选择器,所以这里可以简要提及并引导。 此外,根据用户要求,我们需要生成相关问题。 注意:在回答中,我们将引用作为参考,但主要根据用户的问题“如何学习”来组织内容。 结构建议: 一、QSS基础概念 二、QSS语法详解(选择器、属性) 三、QSS的加载方式(多种方法,参考引用[2]) 四、QSS的优先级(引用[3]) 五、学习建议和实践方法(包括使用引用[4]中的demo进行练习) 六、常见问题(坑,参考引用[2]) 七、总结 最后,生成相关问题。</think>### Qt样式表(QSS)学习指南 #### 一、QSS核心概念 1. **基本语法结构** QSS采用`选择器 { 属性: 值; }`格式,例如: ```css QPushButton { background-color: #3498db; /* 蓝色背景 */ border-radius: 5px; /* 圆角边框 */ } ``` 选择器定位控件,声明块定义样式属性[^1]。 2. **选择器类型**(核心定位工具) | 类型 | 示例 | 作用 | |---------------|--------------------------|----------------------------| | 通用选择器 | `*` | 所有控件 | | 类型选择器 | `QPushButton` | 指定类别的控件 | | ID选择器 | `#submitBtn` | 特定objectName的控件 | | 伪状态选择器 | `QPushButton:hover` | 鼠标悬停状态 | | 属性选择器 | `QCheckBox[checked="true"]` | 按属性状态匹配 | 3. **加载方式对比** | 方式 | 实现方法 | 适用场景 | 优缺点[^2] | |---------------|------------------------------|------------------------|--------------------------| | 代码设置 | `widget->setStyleSheet(...)` | 简单调试 | 灵活但维护难 | | 外部文件 | 读取.qss文件 | 项目开发 | 易修改但需文件管理 | | 资源文件 | 编译到.qrc资源 | 正式发布 | 防篡改但需重新编译 | | 二进制资源 | rcc编译成二进制 | 商业应用 | 安全且支持热更新 | #### 二、关键学习步骤 1. **基础语法实践** ```cpp // 示例:设置按钮悬停效果[^4] m_pBtnTest->setStyleSheet( "QPushButton { background: #3498db; }" "QPushButton:hover { background: #2980b9; }" ); ``` 2. **优先级规则** QSS优先级遵循: **ID选择器 > 伪状态选择器 > 类选择器 > 通用选择器** 自身样式表优先于继承样式表[^3],例如: ```css /* 全局设置 */ QLabel { color: black; } /* 局部覆盖 */ #titleLabel { color: red; /* 优先级更高 */ } ``` 3. **子控件定制** 复合控件可精确控制子部件: ```css QComboBox::drop-down { image: url(down_arrow.png); background: #e74c3c; } ``` 4. **动态样式技巧** 使用伪状态实现交互反馈: ```css /* 按钮不同状态 */ QPushButton:pressed { background: #c0392b; } QPushButton:disabled { opacity: 0.5; } ``` #### 三、学习路径建议 1. **基础阶段** - 掌握核心选择器(类型/ID/伪状态) - 练习常用属性:`color`, `background`, `border`, `padding` - 使用Qt Designer实时预览效果 2. **进阶阶段** - 学习复杂控件定制(如`QTableView`, `QTabWidget`) - 掌握盒模型布局:`margin/padding/border` - 实现动态换肤(资源文件热更新)[^2] 3. **高级技巧** ```css /* 响应式布局 */ QWidget[device="mobile"] QLabel { font-size: 12pt; /* 移动端适配 */ } /* 属性继承 */ QDialog { font-family: "Arial"; } /* 子控件自动继承 */ ``` #### 四、避坑指南 1. **常见问题** - 样式不生效:检查选择器优先级冲突 - 性能下降:避免全局选择器`*`的滥用 - 渲染异常:复杂控件需使用`qproperty-`语法 2. **调试工具** ```cpp // 打印应用的所有样式规则 qDebug() << widget->styleSheet(); // 检查样式继承链 qDebug() << widget->metaObject()->className(); ``` > **学习资源**: > - 官方文档:Qt Style Sheets Reference > - 实战项目:参考[^4]的测试demo进行修改 > - 工具:Qt Creator的样式表编辑器(设计模式) ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

贝勒里恩

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

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

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

打赏作者

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

抵扣说明:

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

余额充值