我在 Qt
中创建了一个按钮并给了它QSS
属性 background-color: gray;
,而我的外部样式表设置了 QSS
同一按钮的属性为background-color: blue;
.当我运行应用程序时,按钮是灰色的,即使样式表是在 QWidget::show()
之后应用的。在 QApplication::exec()
之前被调用, 如下所示:
MyWidget w;
w.show();
...
app.setStyleSheet("..."); // contents of external stylesheet
return app.exec();
有没有可能有
QApplication::setStyleSheet()
覆盖 QSS
Qt
中分配给 Widget 的属性.
最佳答案
不,无法覆盖 QSS
属性你想要的方式,相信我,你不想。这不是您调用setStyleSheet
的顺序。这很重要。首先是等级制度。调用顺序仅对位于同一层次结构级别的小部件很重要。
原因是小部件定义了其内部样式规则,这些规则覆盖了父样式,因此在您的情况下是应用程序样式。这是一个受尊重的等级制度。您可以通过以下方式查看:
假设你有一个 QWidget
具有以下子层次结构:
QWidget
|__QPushButton
|
|__QFrame
| |
| |_QListView
|
|__QProgressBar
假设您要自定义
background-color
到您的层次结构中的所有小部件。如果调用QApplication::setStyleSheet()
将覆盖 child 的样式表属性,您不可能为 child 设置自定义样式。这就是为什么子小部件的 QSS
属性覆盖父窗口小部件的 QSS
特性。像查看小部件的通常方式一样查看它。
QPushButton
显示在 QWidget
的顶部. QFrame
显示在 QWidget
的顶部. QListView
也显示在 QWidget
的顶部.样式的应用方式相同。我建议做的是只有一个外部
QSS
文件,您可以在其中定义所需的一切。编辑:
如
N1ghtLight
指出QSS
保留类继承层次结构,因此如果为类设置属性,则其所有派生类都将继承该属性。例如,如果您有以下样式表:QAbstractButton {
background-color: red;
}
QPushButton {
color: blue;
}
全部
QPushButtons
将有背景颜色 red
和文字颜色 blue
作为 QPushButton
继承 background-color
来自 QAbstractButton
的属性(property)值(value)这是它的祖先,而 QAbstractButton
不是 QPushButton
的s 将具有背景颜色 red
但文本颜色将保持不变。上面的示例使用了类型选择器。您可以使用不同的选择器类型将样式应用于特定对象。您可以看到不同的选择器类型 here .
关于qt - 使用 QApplication::setStyleSheet 覆盖 Qt 中设置的 QSS 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26103539/