2013-08-07 41 views
2

我有什麼: -[Qt]如何支持:按下自定義窗口小部件的樣式表狀態?

我有延伸QFrame自定義窗口小部件(而不是QWidget的爲QFrame已經有一個工作的paintEvent實現)。我重寫了mousePressed()和mouseReleased()來發出pressed()釋放()和點擊()信號。到目前爲止,所有事情都如預期那樣好。

我需要的: -

這個自定義部件是有基本的樣式表支持,它支持:懸停狀態就好了。 但是:按下狀態不起作用。我已經發現這是bcoz,它不被QFrame/QLabel等支持。 我想知道爲了支持按下狀態,我需要做什麼。 我應該設置一些屬性/屬性按下並釋放或其他任何東西?

+0

只是快速的問題。是否有使用QFrame而不是QPushButton,QToolButton或QAbstractButton作爲基類的特殊原因? –

+0

是的。我需要能夠添加更多的小部件,並設置QFrame支持的佈局 –

回答

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 
+0

我期待Qt有一個屬性/屬性代表:按下狀態。但我想不是。這直到Qt決定添加它爲止。 –

+0

先生,您剛剛度過我的一天! –

0

你可以用你想要的樣式在mousePressEvent和mouseReleaseEvent中做一個「setStyleSheet()」?

+0

是的,我現在有這個。實際上,我得到了當前樣式表String提取字符串的:pressed部分,並將其設置在mousePressed()中,並在mouseReleased()中恢復正常樣式表作爲解決方法。我正在尋找一個合適的解決方案,因爲我需要使用多個自定義小部件。 –

相關問題