5

我已经彻底阅读了文档并搜索了谷歌和 stackoverflow 等熟悉的域已经有一段时间了。不幸的是,这一切都没有找到任何解决方案。所以我希望这里有人可能是我的救世主..

情况:

我正在使用:PyQt4、Python 2.6、Windows 7

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

所以我的结构如下:

QListWidget
    +QListWidgetItem
        +QLabel

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

QListWidget::item QLabel
{
    background-color:#000
}

问题:

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

QListWidget::item:hover QLabel
{
    background-color:#000
}

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

什么不是解决方案:

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

主要问题:

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

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

资料来源:

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

4

1 回答 1

1

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

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

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

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

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

于 2014-03-18T10:43:22.343 回答