导致样式表渗入子部件的原因

What causes style sheet bleed down into child widget

本文关键字:样式      更新时间:2023-10-16

我有一个子小部件(QFrame),它有自己的样式表设置。在这个QFrame上有4个标签,我不希望它们有边框。这个QFrame的父窗口小部件是一个QWidget,border属性在我的QFrame标签上流血。

我可以直接为每个标签设置边界,但我不想这样做。我只是想避免流血。我该怎么做?

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

您尝试过更具体的选择器吗?也喜欢按对象名称选择?QLabel继承了QFrame。因此,当您告诉父QFrame以某种方式行事时,您也在告诉所有继承QFrameQObject,如QLabel,也要具有相同的样式。

在文档中,它提到了早期使用setObjectName#objectName

如果我们希望该属性仅应用于一个特定的QLineEdit,我们可以使用QObject::setObjectName()为其命名并使用ID参照它的选择器:

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

http://doc.qt.io/qt-5/stylesheet-examples.html

稍后会有更多选择器的例子:

http://doc.qt.io/qt-5/stylesheet-examples.html#complex-选择器示例

正如你在回答中已经提到的,另一种选择是为你的QLabel s写一个不同的风格。

Qt样式表中的选择器的行为与CSS中的选择器惊人地相似。订购、额外的选择器等可以让你非常具体地确定你想要一种风格应用于哪些项目。

希望能有所帮助。