2014-11-20 2 views
1

У меня есть QToolBar с QToolButtons. Когда основное окно слишком мало, оно покажет кнопку «>>», чтобы расширить вид на несколько строк и показать все QToolButtons.Qt: Стиль >> стрелка, когда QToolBar слишком мал

Как стилизовать эту кнопку «>>»? Я хотел бы изменить значок и цвет фона.

Я уже пробовал с этими селекторами: QToolButton :: menu-indicator, QToolButton :: menu-button, QToolButton :: down-arrow. Не работает.

Как изменить цвет и ширину кнопки «>>»?

QToolButton { 
    background-color: transparent; 
    border: 1px solid #3A3939; 
    border-radius: 3px; 
} 

QToolButton:hover, QToolButton::menu-button:hover { 
    background: #787876; 
} 

QToolButton::checked{ 
    background: #484846; 
    border: 1px solid #787876; 
} 

QToolButton:pressed, QToolButton::menu-button:pressed { 
    background: #787876; 
} 

QToolButton[popupMode="1"]{ 
/* only for MenuButtonPopup */ 
    padding-right: 30px; 
    background: red; 
} 
QToolButton[popupMode="2"]{ 
/* only for OSC Server Status */ 
    padding-right: 30px; 
    background: #484846; 
} 
QToolButton[popupMode="2"]:hover{ 
    background: #787876; 
} 
QToolButton::down-arrow{ 
} 
/* the subcontrols below are used only in the MenuButtonPopup mode */ 
QToolButton::menu-button{ 
} 

QToolButton::menu-button:hover{ 
    background: #787876; 
} 
QToolButton::menu-button:pressed{ 
} 
QToolButton::menu-indicator{ 
    bottom: 5px; 
    right: 5px; 
} 
+0

У вас есть какой-либо код или JSFiddle для нас работать прочь, так что другие вниз по дороге может найти это полезным. Благодаря! –

+0

Я отредактировал сообщение с помощью CSS. – Goshi

ответ

1

Вы не можете сделать это с помощью CSS, однако это может быть сделано с помощью настраиваемого стиль:

  • Наследуйте новый класс от QStyle/QCommonStyle.
  • Reimplement pixelMetric, чтобы изменить размер кнопки.
  • Qt4: Создайте слот standardIconImplementation, чтобы изменить значок кнопки.
  • Qt5: Reimplement standardIcon чтобы изменить значок кнопки.
  • создайте этот стиль и используйте setStyle, чтобы применить его к панели инструментов (или к приложению).

Переопределённые методы:

virtual int MyStyle::pixelMetric(PixelMetric pm, const QStyleOption* option, const QWidget* widget) const override 
{ 
    if (pm == QStyle::PM_ToolBarExtensionExtent) 
    return mySize; // width of a toolbar extension button in a horizontal toolbar and the height of the button in a vertical toolbar 
    return QStyle::pixelMetric(pm, option, widget); 
} 

Q_SLOT QIcon MyStyle::standardIconImplementation(StandardPixmap standardIcon, const QStyleOption * option = 0, const QWidget * widget = 0) const 
{ 
    switch (standardIcon) 
    { 
    case QStyle::SP_ToolBarHorizontalExtensionButton : 
     return m_toolBarHExtendButtonIcon; 

    case QStyle::SP_ToolBarVerticalExtensionButton : 
     return m_toolBarVExtendButtonIcon; 
    } 

    return QStyle::standardIconImplementation(standardIcon, option, widget); 
} 
0

Спасибо большое!

Однако наследование от QStyle предполагает повторное выполнение множества функций. Я решил унаследовать от QCleanLookStyle (но есть много других приятных стилей), чтобы переопределить только pixelMetric и standardIconImplementation.

Для тех, кто решил использовать QCleanLookStyle, как и я, не забудьте вызвать правильную родительскую функцию в pixelMetric, иначе вы получите ошибки связи.

virtual int pixelMetric(PixelMetric pm, const QStyleOption* option, const QWidget* widget) const override 
{ 
if (pm == QStyle::PM_ToolBarExtensionExtent) 
return 1234; 
return QCleanlooksStyle::pixelMetric(pm, option, widget); 
} 

Спасибо за ответ, он работает.

Вы не можете сделать это с помощью CSS, однако это может быть сделано с помощью пользовательских стиля:

  • Наследуйте новый класс от QStyle/QCommonStyle.
  • Reimplement pixelMetric, чтобы изменить размер кнопки.
  • Qt4: Создайте слот standardIconImplementation, чтобы изменить значок кнопки.
  • Qt5: Reimplement standardIcon чтобы изменить значок кнопки.
  • создайте этот стиль и используйте setStyle, чтобы применить его к панели инструментов (или к приложению).

Переопределённые методы:

virtual int MyStyle::pixelMetric(PixelMetric pm, const QStyleOption* option, const QWidget* widget) const override 
{ 
    if (pm == QStyle::PM_ToolBarExtensionExtent) 
    return mySize; // width of a toolbar extension button in a horizontal toolbar and the height of the button in a vertical toolbar 
    return QStyle::pixelMetric(pm, option, widget); 
} 

Q_SLOT QIcon MyStyle::standardIconImplementation(StandardPixmap standardIcon, const QStyleOption * option = 0, const QWidget * widget 

= 0) Const { переключатель (standardIcon) { случай QStyle :: SP_ToolBarHorizontalExtensionButton: возвращение m_toolBarHExtendButtonIcon;

case QStyle::SP_ToolBarVerticalExtensionButton : 
     return m_toolBarVExtendButtonIcon; 
    } 

    return QStyle::standardIconImplementation(standardIcon, option, widget); 
} 
+0

Лучше добавить свою информацию в качестве комментария, потому что я уверен, что этот комментарий, подобный комментарию, скоро будет удален. – Ezee

Смежные вопросы