[Qt]如何支持:自定义小部件的样式表按下状态?

时间:2013-08-07 12:41:15

标签: c++ qt qt4 qtstylesheets

我有什么: -

我有一个自定义小部件,它扩展了QFrame(而不是QWidget,因为QFrame已经有了一个有效的paintEvent实现)。我已经重写了mousePressed()和mouseReleased()来发出pressed()release()和clicked()信号。到目前为止,一切都如期待的那么好。

我需要什么: -

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

2 个答案:

答案 0 :(得分:2)

您可以将属性设置为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

答案 1 :(得分:0)

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