在 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 中为整个小部件设置样式表的主要内容,如果未能解决你的问题,请参考以下文章