更改父伪状态的后代 QLabel 属性

Nic*_*KNL 5 qt qtstylesheets

我已经彻底阅读了文档并搜索了很长一段时间以来熟悉的域,例如 google 和 stackoverflow。不幸的是,这一切都没有找到任何解决方案。所以我希望这里的某个人可能是我的救星..

情况:

我使用的是什么:PyQt4、Python 2.6、Windows 7

我正在尝试设置 QLabel 样式(使用我在程序中导入的 CSS 文件)。QLabel 位于 QListWidgetItem 中。

所以我的结构如下:

QListWidget
    +QListWidgetItem
        +QLabel
Run Code Online (Sandbox Code Playgroud)

因此,根据文档,访问 QLabel 的方式如下。这里没问题。

QListWidget::item QLabel
{
    background-color:#000
}
Run Code Online (Sandbox Code Playgroud)

问题:

但是,我希望 QLabel 样式仅在我悬停 QListWidgetItem 时更改。使用以下代码,由于某种原因,伪状态会被忽略。因此背景颜色被应用于 QLabels,但它不尊重伪状态。

QListWidget::item:hover QLabel
{
    background-color:#000
}
Run Code Online (Sandbox Code Playgroud)

当我独立运行我的应用程序时,这种情况仍然存在。

什么不是解决方案:

  • 将 QLabel 伪状态设置为悬停将不起作用,因为 QListWidgetItem 比 QLabel 高。

主要问题:

有没有办法在且仅当 QListWidgetItem 悬停时更改 QLabel 的样式属性,如何实现?

这里的目标是仅通过 css(或 qss,如果您愿意)来完成,这是一个单独的文件,可以导入到程序中。

资料来源:

qss 文档:http : //doc.qt.digia.com/4.6/stylesheet-syntax.html

Bru*_*run 1

至少在 Qt 4.7 中你不能做到这一点(没有测试 Qt5)这里有很好的解释:How to set color of child QLabels while movingparent QFrame with QSS?

似乎 Qt css 不支持后代元素的伪状态,但原始 CSS 支持: http: //codepen.io/anon/pen/olwHs

您应该编写一些代码来支持这种风格。使用 Enter/LeaveEvent 处理悬停,然后通过以下方式在代码中设置样式setStyleSheet()

您还可以使用动态属性将样式保留在 .ui 中 QLabel[hover="true"] {} ,然后在代码中设置和重置该值

您也可以使用主小部件的动态属性 [hover="true"] QLabel {}