【问题标题】:How to force a pseudo-state in a widget如何在小部件中强制伪状态
【发布时间】:2013-11-15 04:41:35
【问题描述】:

我有我的自定义小部件,我在其中定义了这样的样式表:

QWidget#this { background-color: red; }
QWidget#this:hover { background-color: yellow; }

当我将鼠标移到小部件上时这有效,但当我将另一个小部件拖到第一个小部件上时我没有这种行为。

我已捕获 DragMove 事件,但无法发送类似 mouseHover 事件的内容(MouseMove 事件似乎不起作用)。

这可能吗?当我拖动另一个小部件时,还有其他方法可以使用样式表吗?

【问题讨论】:

  • 你试过QWidget::dragEnterEvent()吗?
  • 嗯,我在样式表中实现了这种行为,所以我想用同样的方法解决它。使用 dragEnterEvent 我可以捕获事件,但无法将样式表更改为指定的悬停伪状态

标签: qt qt4 qtstylesheets


【解决方案1】:

几天前我遇到了同样的问题。尝试为您的小部件定义一个自定义属性,例如拖动,并为您的样式表使用条件:

QWidget#this[dragging=true]{
    background-color: red;
}

您可能需要在更改自定义属性后使用QStyle::polish(),以刷新您的小部件样式。

希望对你有帮助。

【讨论】:

  • 感谢您的建议!但这并不能解决我的问题,因为当我收到 dragEnter 和 dragLeave 事件时,我必须手动设置该属性(并取消设置)。 hover 伪事件的美妙之处在于它是自动调用的,这就是我想使用它的原因。还是谢谢!
  • 在最后调用 style()->polish(this) 方法的 style()->polish(this) 方法为可样式化的小部件(样式表参考中 QWidget 文档中的 4 行代码)调用paintEvent我!
猜你喜欢
  • 1970-01-01
  • 2021-11-01
  • 2021-03-05
  • 2021-10-05
  • 2021-09-21
  • 2021-02-16
  • 2020-08-06
  • 2021-08-27
  • 2019-10-06
相关资源
最近更新 更多