2014-02-23 61 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。