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



我已经仔细阅读了文档,并搜索了谷歌和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,如果你愿意的话)来完成,css是一个单独的文件,可以导入到程序中。

来源:

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

至少在Qt 4.7中不能做到这一点(未测试Qt5)这里有一个很好的解释:当用QSS悬停父QFrame时,如何设置子QLabels的颜色?

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

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

您也可以使用的dynamic属性将样式保留在.ui中QLabel[hover="true"] {}然后在代码中设置并重置该值

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

最新更新