【问题标题】:[Qt]How to support :pressed state of style sheet for custom widget?[Qt]如何支持:自定义小部件样式表的按下状态?
【发布时间】:2013-08-08 20:18:45
【问题描述】:

我有什么:-

我有一个扩展 QFrame 的自定义小部件(而不是 QWidget,因为 QFrame 已经有一个工作的paintEvent 实现)。我已经覆盖了 mousePressed() 和 mouseReleased() 以发出按下的() 释放() 和 clicked() 信号。到目前为止,一切正常。

我需要什么:-

这个自定义小部件具有基本的样式表支持,并且很好地支持 :hover 状态。 但是 :pressed 状态不起作用。我已经发现这是因为 QFrame/QLabel 等不支持它。 我想知道我需要做什么来支持 :pressed 状态。 我应该在按下和释放或其他任何东西上设置一些属性/属性吗?

【问题讨论】:

  • 快速提问。使用 QFrame 代替 QPushButton、QToolButton 或 QAbstractButton 作为基类有什么特别的原因吗?
  • 是的。我需要能够向其中添加更多小部件并设置 QFrame 支持良好的布局

标签: c++ qt qt4 qtstylesheets


【解决方案1】:

您可以将属性设置为您的QLabel(或您正在使用的任何小部件)并更改该属性的值。然后在样式表中使用该属性。

例子:

this->setStyleSheet("*[myproperty=\"true\"] { background-color: red }");
d_label = new QLabel("dynamic label", this);
d_label->setProperty("myproperty", false);

然后在 mousePressEvent 中设置,在 mouseReleaseEvent 中取消设置该属性:

d_label->setProperty("myproperty", true); // or false when you wish to unset it
style()->unpolish(d_label);
style()->polish(d_label); // force a stylesheet recomputation

【讨论】:

  • 我期待 Qt 有一个代表 :pressed 状态的属性/属性。但我猜不是。直到 Qt 决定添加它。
  • 你,先生,让我开心!
【解决方案2】:

您可以在 mousePressEvent 和 mouseReleaseEvent 中使用您想要的样式执行“setStyleSheet()”吗?

【讨论】:

  • 是的。我现在有这个。事实上,我正在获取当前样式表字符串,提取字符串的 :pressed 部分并将其设置在 mousePressed() 中,并在 mouseReleased() 中恢复正常样式表作为解决方法。我正在寻找一个合适的解决方案,因为我需要使用多个自定义小部件。
猜你喜欢
  • 2011-11-08
  • 1970-01-01
  • 2016-07-07
  • 2012-12-27
  • 1970-01-01
  • 2012-08-06
  • 2014-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多