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

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

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

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

【问题讨论】:

    标签: c++ qt qtstylesheets


    【解决方案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 包含所有小部件的问题。
      猜你喜欢
      • 1970-01-01
      • 2015-10-15
      • 2015-04-26
      • 1970-01-01
      • 1970-01-01
      • 2011-11-08
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      相关资源
      最近更新 更多