2014-02-23 89 views
0

我需要爲相同類型的小部件實例分配不同的樣式。特別爲QActions。以下樣式表設置QActions的背景圖像,實際的工具按鈕。Qt樣式表 - 相同類型小部件的不同樣式

QToolButton 
{ 
    background-image: url(bg.png); 
} 

但我需要爲這樣的工具按鈕分配不同的背景。

QToolButton::actClose 
{ 
    background-image: url(close.png); 
} 
QToolButton::actOpen 
{ 
    background-image: url(open.png); 
} 

有沒有簡單的方法,或者這是不可能的?

回答

0

可以爲QToolButton

的情況下,設定對象名稱
QToolButton *button = new QToolButton; 
button->setObjectName("firstButton"); 

button = new QToolButton; 
button->setObjectName("secondButton"); 

和未來使用它們在樣式表

QToolButton#firstButton 
{ 
    background-color: gray 
} 

QToolButton#secondButton 
{ 
    background-color: red 
} 
+0

它不工作,因爲它不是一個工具按鈕,它是一個QAction –

+0

'QAction'不是一種'QWidget',所以你不能爲它設置背景或圖像(直接來自'QObject ')。 'QToolButton'是一種'QWidget',它與一些對它的操作相關聯,因此可以有背景,圖標等。 – Blueman

0

它幫助,如果你可以張貼創建QToolButton與QActions同事C++代碼。

從在QToolBar的參考引用和「工具欄按鈕通過添加操作,使用的addAction()或insertAction()。添加」「QWidget的*在QToolBar widgetForAction(的QAction *動作)常量 返回與指定的操作相關聯的窗口小部件」。

因此,如果您要創建QToolBar並調用QToolBar :: addAction(QAction *)來填充它,則可以獲取指向工具按鈕的指針。嘗試QToolBar :: widgetForAction(),並調用setObjectName(「」),並且可以應用Blueman的方法。

將樣式表應用到窗口小部件時,在類名後面使用「#」指定對象名,在objectName的className後面使用「:」表示對象的狀態,如「enabled」,「::」用於指定諸如「ListView :: Item」之類的子控件,不幸的是QAction不是QToolBar。