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

时间:2013-08-29 14:58:26

标签: qt qtstylesheets

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

情况:

我使用的是:PyQt4,Python 2.6,Windows 7

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

所以我的结构如下:

QListWidget
    +QListWidgetItem
        +QLabel

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

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

问题:

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

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

1 个答案:

答案 0 :(得分:0)

至少在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 {}