QT CSS 选择器

在 Qt 的样式表(Style Sheet)中,选择器(Selector)是用来指定样式应用对象的一种语法。它类似于 CSS 中的选择器,用于明确指定哪些控件(或控件的子元素)应该应用特定的样式。通过使用选择器,你可以更精确地控制样式的作用范围,避免样式被意外继承或应用到错误的控件上。

1. 选择器的类型

在 Qt 的样式表中,有几种常用的选择器:

(1)类型选择器(Type Selector)

类型选择器基于控件的类名来选择控件。例如:

css 复制代码
QPushButton {
    background-color: red;
}

这段代码会将所有 QPushButton 控件的背景颜色设置为红色。

(2)对象名称选择器(Object Name Selector)

通过控件的 objectName 属性来选择特定的控件。在 Qt Designer 中,你可以为控件设置 objectName,然后通过它来应用样式。例如:

css 复制代码
QPushButton#myButton {
    background-color: blue;
}

如果有一个按钮的 objectName 是 myButton,那么只有这个按钮的背景颜色会被设置为蓝色。

(3)子控件选择器(Sub-Controls Selector)

用于选择控件的子元素。例如,选择 QComboBox 的下拉按钮:

css 复制代码
QComboBox::drop-down {
    background-color: green;
}
(4)伪状态选择器(Pseudo-State Selector)

用于选择控件在特定状态下的样式。例如,选择按钮在按下状态时的样式:

css 复制代码
QPushButton:pressed {
    background-color: gray;
}
(5)组合选择器(Combined Selector)

可以将多种选择器组合使用,以更精确地选择控件。例如:

css 复制代码
QWidget QPushButton {
    background-color: yellow;
}

这段代码会选择所有在 QWidget 中的 QPushButton 控件,并将它们的背景颜色设置为黄色。

2. 如何使用选择器

在 Qt Designer 中,你可以通过以下步骤使用选择器:

(1)设置控件的 objectName

在 Qt Designer 中,选中控件,然后在右侧的属性编辑器中找到 objectName 属性,为其设置一个唯一的名称。例如,为一个按钮设置 objectName 为 myButton。

(2)在样式表中使用选择器

在样式表中,使用选择器来指定样式的应用范围。例如:

css 复制代码
QWidget {
    background-color: rgb(122, 132, 131); /* 父控件的背景颜色 */
}

QPushButton#myButton {
    background-color: rgb(255, 255, 255); /* 特定按钮的背景颜色 */
}
(3)组合选择器的使用

如果你想为父控件中的所有按钮设置样式,但不希望影响其他位置的按钮,可以使用组合选择器:

css 复制代码
QWidget QPushButton {
    background-color: rgb(255, 255, 255); /* 父控件中所有按钮的背景颜色 */
}

3. 示例

假设你有一个 QWidget,其中包含多个按钮,你希望父控件的背景颜色不影响按钮的背景颜色。你可以这样设置样式表:

css 复制代码
QWidget {
    background-color: rgb(122, 132, 131); /* 父控件的背景颜色 */
}

QPushButton {
    background-color: rgb(255, 255, 255); /* 所有按钮的背景颜色 */
}

或者,如果你只想设置某个特定按钮的样式:

css 复制代码
QWidget {
    background-color: rgb(122, 132, 131); /* 父控件的背景颜色 */
}

QPushButton#myButton {
    background-color: rgb(255, 0, 0); /* 特定按钮的背景颜色 */
}
相关推荐
code2cat7 小时前
Java进阶篇之AtomicMarkableReference:引用还在,标记已经改变
java·开发语言·cas·并发编程·逻辑删除
CappuccinoRose7 小时前
FormData数据处理
开发语言·前端·javascript·表单数据
Zguigo7 小时前
【CUDA8】第一个CUDA C++ Kernel --vector add
java·开发语言·c++
-Marks-8 小时前
【C++编程】STL容器(二)--- vector底层模拟实现(常用接口实现 | 扩容机制 | 深浅拷贝 | 迭代器失效)
开发语言·c++·vector·内存管理·迭代器失效·vector底层模拟实现
Shadow(⊙o⊙)8 小时前
C++11并发支持库
开发语言·c++
一技安身8 小时前
【java】JDK8 + JDK17 绿色解压共存方案-全程不修改任何系统环境变量
java·开发语言
hudd6689 小时前
JavaEE 初阶 - 多线程(初阶)
java·开发语言·java-ee
I Am a robert girl9 小时前
稀有事件估计的迭代去对齐:从源码视角拆解重要性采样新范式
开发语言·python·机器学习·重要性采样·蒙特卡洛方法·稀有事件估计
golang学习记9 小时前
rust开发,选VS Code还是RustRover?
开发语言·后端·rust
打工仔折腾 AI10 小时前
从零写一个CAD 05:以鼠标为中心的滚轮缩放,招法能复用但顺序不能反
开发语言·后端·python·性能优化·计算机外设·swift·ai agent 实战