我已经仔细阅读了文档,并搜索了谷歌和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 {}