是什么导致样式表渗透到子部件中

问题描述 投票:0回答:1

我有一个子小部件(QFrame),它有自己的样式表设置。在此 QFrame 上有 4 个标签,我不希望它们周围有边框。该 QFrame 的父窗口小部件是一个 QWidget,并且 border 属性正在渗入我的 QFrame 标签上。

我可以通过直接设置每个标签的边框来使这些消失,但我不想这样做。我只是想避免流血。我该怎么做?

顺便说一句,这两个小部件(父部件和子部件)都是由第三个部件(即 QDialog)创建的。这个 QDialog 创建了父级,然后创建了子级,并在其构造函数中将父级传递给子级。

c++ qt qt-creator qtstylesheets
1个回答
1
投票

您尝试过更具体的选择器吗?也喜欢按对象名称选择吗?

QLabel
继承了
QFrame
。因此,当您告诉父母
QFrame
以某种方式行事时,您也在告诉所有继承
QObject
QFrame
,例如
QLabel
也具有相同的风格。

在文档中,它早期提到使用

setObjectName
#objectName

如果我们希望该属性仅应用于一个特定的 QLineEdit,我们 可以使用

QObject::setObjectName()
为其命名并使用 ID 选择器参考它:

myDialog->setStyleSheet("QLineEdit#nameEdit { background-color: yellow }");

Qt 文档:Qt 样式表示例

稍后有更多选择器的示例:

复杂选择器示例

就像您在答案中已经提到的那样,另一种选择是为您的

QLabel
编写不同的样式。

Qt StyleSheets 中的选择器与 CSS 中的选择器表现出惊人的相似。排序、附加选择器等可以让您非常具体地了解您想要应用样式的项目。

© www.soinside.com 2019 - 2024. All rights reserved.