【问题标题】:Qt: Style the >> arrow when a QToolBar is too smallQt:当 QToolBar 太小时设置 >> 箭头的样式
【发布时间】:2014-11-20 13:32:10
【问题描述】:

我有一个带有 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;
}

【问题讨论】:

  • 您有任何代码或 JSFiddle 供我们使用,以便其他人可以发现这很有用。谢谢!
  • 我用 CSS 编辑了帖子。

标签: qt qtstylesheets


【解决方案1】:

您不能通过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);
}

【讨论】:

    【解决方案2】:

    非常感谢!

    但是,从 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) 常量 { 开关(标准图标) { 案例 QStyle::SP_ToolBarHorizo​​ntalExtensionButton : 返回 m_toolBarHExtendButtonIcon;

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

    【讨论】:

    • 最好将您的信息添加为评论,因为我敢打赌,这个类似评论的答案很快就会被删除。
    猜你喜欢
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 1970-01-01
    • 2015-12-16
    • 2023-03-16
    • 1970-01-01
    • 2019-03-29
    相关资源
    最近更新 更多