Таблица стилей Qt — разные стили для виджетов одного типа

Мне нужно назначить разные стили для экземпляров одного и того же типизированного виджета. Специально для QActions. Следующая таблица стилей устанавливает фоновые изображения QActions, фактически кнопки инструментов.

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

Но мне нужно назначить разные фоны для таких кнопок инструментов.

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

Есть ли такой простой способ или это невозможно?


person Cahit Burak Küçüksütcü    schedule 23.02.2014    source источник


Ответы (2)


Вы можете установить имя объекта для экземпляров QToolButton

QToolButton *button = new QToolButton;
button->setObjectName("firstButton");

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

а затем используйте их в таблице стилей

QToolButton#firstButton 
{ 
   background-color: gray 
}

QToolButton#secondButton 
{ 
   background-color: red 
}
person Blueman    schedule 23.02.2014
comment
Это не работает, потому что это не кнопка инструмента, это QAction - person Cahit Burak Küçüksütcü; 23.02.2014
comment
QAction не является разновидностью QWidget, поэтому вы не можете установить для него фон или изображение (присущее непосредственно QObject). QToolButton — это своего рода QWidget, связанный с каким-то действием, поэтому может иметь фон, значок и т. д. - person Blueman; 23.02.2014

Помогает, если вы можете опубликовать код C++, который создает QToolButton и связывается с QActions.

Процитируйте из справочника QToolBar «Кнопки панели инструментов добавляются путем добавления действий с использованием addAction() или insertAction()». И «QWidget * QToolBar widgetForAction (QAction *action) const Возвращает виджет, связанный с указанным действием».

Итак, если вы создаете QToolBar и вызываете QToolBar::addAction(QAction*) для его заполнения, можно получить указатель на кнопки инструментов. Попробуйте QToolBar::widgetForAction() и вызовите setObjectName(""), и можно применить метод Blueman.

при применении таблицы стилей к виджетам «#» используется после имени класса для указания имени объекта, «:» используется после className из objectName, указывающего состояние объекта, например «включен», «::» используется для указания подэлементов управления, таких как как "ListView::Item", к сожалению, QAction не является ни QToolBar.

person Martian Puss    schedule 25.02.2014