Qt:样式>> QToolBar太小时的箭头

时间:2014-11-20 13:32:10

标签: qt qtstylesheets

我有一个带有 QToolButtons 的QToolBar。当主窗口太小时,它将显示“>>”按钮,将视图扩展为多行并显示所有QToolButtons。

如何设置此“>>”的样式按钮?我想更改图标和背景颜色。

我已经尝试过这些选择器: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;
}

2 个答案:

答案 0 :(得分:2)

您不能通过CSS执行此操作,但可以使用自定义样式完成:

  • QStyle / QCommonStyle继承新课程。
  • 重新实现pixelMetric以更改按钮的大小。
  • Qt4:创建广告位standardIconImplementation以更改按钮的图标。
  • Qt5:重新实现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);
}

答案 1 :(得分: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继承新课程。
  •   
  • 重新实现pixelMetric以更改按钮的大小。
  •   
  • Qt4:创建广告位standardIconImplementation以更改按钮的图标。
  •   
  • Qt5:重新实现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)         {         case QStyle :: SP_ToolBarHorizo​​ntalExtensionButton:             return m_toolBarHExtendButtonIcon;

  case QStyle::SP_ToolBarVerticalExtensionButton :
      return m_toolBarVExtendButtonIcon;
  }

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