[Qt]如何支持:自定义小部件样式表的按下状态?
Posted
技术标签:
【中文标题】[Qt]如何支持:自定义小部件样式表的按下状态?【英文标题】:[Qt]How to support :pressed state of style sheet for custom widget? 【发布时间】:2013-08-08 20:18:45 【问题描述】:我有什么:-
我有一个扩展 QFrame 的自定义小部件(而不是 QWidget,因为 QFrame 已经有一个工作的paintEvent 实现)。我已经覆盖了 mousePressed() 和 mouseReleased() 以发出按下的() 释放() 和 clicked() 信号。到目前为止,一切正常。
我需要什么:-
这个自定义小部件具有基本的样式表支持,并且很好地支持 :hover 状态。 但是 :pressed 状态不起作用。我已经发现这是因为 QFrame/QLabel 等不支持它。 我想知道我需要做什么来支持 :pressed 状态。 我应该在按下和释放或其他任何东西上设置一些属性/属性吗?
【问题讨论】:
快速提问。使用 QFrame 代替 QPushButton、QToolButton 或 QAbstractButton 作为基类有什么特别的原因吗? 是的。我需要能够向其中添加更多小部件并设置 QFrame 支持良好的布局 【参考方案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() 中恢复正常样式表作为解决方法。我正在寻找一个合适的解决方案,因为我需要使用多个自定义小部件。以上是关于[Qt]如何支持:自定义小部件样式表的按下状态?的主要内容,如果未能解决你的问题,请参考以下文章