2014-09-20 161 views
4

我發現瞭如何實現從QSS訪問自定義屬性自定義QWidgets網絡上的這個例子:https://qt-project.org/wiki/Qt_Style_Sheets_and_Custom_Painting_ExampleQSS屬性自定義部件:如何實現懸停和按下的狀態

有誰知道我怎麼能實現小部件這樣我可以有不同的顏色懸停或按下狀態?

當前樣式表看起來是這樣的:

SWidget 
{ 
qproperty-lineColor: yellow; 
qproperty-rectColor: red; 
} 

我希望能有這樣的事情:

SWidget:hover 
{ 
qproperty-lineColor: blue; 
qproperty-rectColor: green; 
} 

SWidget:pressed 
{ 
qproperty-lineColor: orange; 
qproperty-rectColor: violet; 
} 

注:我知道這是可以實現鼠標事件和變化使用特定於鼠標事件的qproperties的顏色,例如:

SWidget 
{ 
qproperty-lineColor: yellow; 
qproperty-rectColor: red; 
qproperty-lineColor-hover: orange; 
qproperty-rectColor-hover: violet; 
} 

但我希望能夠使用原始的qss/css方式工作。

問候!

+0

嗨,你真的想使用qproperty系統嗎?因爲只需在設計中懸停/按下更改就可以使用純CSS完成。 – Martin 2014-09-21 09:18:19

+0

是的,:懸停和:按下觸發適用於SWidget小部件,但只適用於標準屬性(顏色,背景顏色,邊框,圖像等)。但是,我需要自定義屬性。例如,我畫了一些線條,我需要在懸停時以不同的顏色進行更改,我希望使用QSS完成這些操作。這樣小部件更容易定製。 – 2014-09-21 09:43:40

回答

0

當用戶懸停或按下小部件時,應該更改一些小部件屬性。併爲該屬性創建不同的QSS選擇器。 更改屬性後,您應該對應用程序樣式進行非拋光\拋光。

qApp->style()->unpolish(this); 
qApp->style()->polish(this); 

其中「this」當前窗口指針。這個「魔術」代碼將有助於影響合適的QSS選擇器。