我已经彻底阅读了文档并搜索了很长一段时间以来熟悉的域,例如 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)
当我独立运行我的应用程序时,这种情况仍然存在。
有没有办法在且仅当 QListWidgetItem 悬停时更改 QLabel 的样式属性,如何实现?
这里的目标是仅通过 css(或 qss,如果您愿意)来完成,这是一个单独的文件,可以导入到程序中。
至少在 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 {}