在 Qt 中为整个小部件设置样式表

Posted

技术标签:

【中文标题】在 Qt 中为整个小部件设置样式表【英文标题】:Set a StyleSheet for a whole widget in Qt 【发布时间】:2013-10-06 12:25:31 【问题描述】:

我有一个自定义小部件,它继承自 QWidget 并在其布局中包含一些标签。每次将鼠标放在它上面时,我都想更改小部件的背景颜色和小部件中的标签(这就是一切!)。

在我的自定义小部件中使用*:hover background: red; 时,我只会在将鼠标移到标签上时将内容变为红色,而不是在标签之外、标签之间等。我不理解这种行为考虑到我放父小部件中的 StyleSheet。

有什么想法吗?非常感谢,

【问题讨论】:

【参考方案1】:

最后我解决了在主 QWidget 中创建 QFrame 并设置该 QFrame 的 StyleSheet 的问题。

【讨论】:

【参考方案2】:

您可以像这样设置将级联到子级的父级样式表:

parent->setStyleSheet("* background: red");

仅用于悬停:

parent->setStyleSheet("*:hover background: red");

查看https://qt-project.org/doc/qt-5.1/qtwidgets/stylesheet-syntax.html

【讨论】:

非常感谢。但是,在那种情况下,我该如何为鼠标悬停呢?我的意思是,我尝试使用QWidget:hover background: foo; ,我可以使用*:hover background: foo; 吗? 适用于所有小部件,但不适用于父级!我完全惊呆了! @DídacPérez,您的自定义小部件继承自哪个 QWidget?我相信某些小部件没有悬停事件(例如:QGroupBox)。您也不需要使用“:hover”。您需要做的是覆盖 enterEvent() 和 leaveEvent()。在 enterEvent() 中你 setStyleSheet(" background: red"),而在 leaveEvent() 中你 setStyleSheet("") 来重置它。 好的,解决了 QFrame 包含所有小部件的问题。

以上是关于在 Qt 中为整个小部件设置样式表的主要内容,如果未能解决你的问题,请参考以下文章

无法在 PyQGIS 中的表小部件中选择行

Qt 中自定义小部件的自定义样式

Qt 中的样式表、隐藏的小部件和大小

Qt Stylesheet 影响整个小部件

如何在 Flutter 的主小部件中为小部件设置背景颜色?

仅为一种小部件设置样式