【问题标题】:Change descendant QLabel properties on parent pseudo-state更改父伪状态的后代 QLabel 属性
【发布时间】:2013-09-02 02:12:40
【问题描述】:

我已经彻底阅读了文档并搜索了谷歌和 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

【问题讨论】:

  • 一般问题很有趣,但我在这里看不到您的用例。为什么要在 QListWidgetItem 而不是 QListWidgetItem 本身(已经显示文本)中设置 QLabel 的样式?

标签: qt qtstylesheets


【解决方案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 {}

【讨论】:

    猜你喜欢
    • 2016-10-02
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 2017-05-18
    相关资源
    最近更新 更多