我有一个带有 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;
}
答案 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_ToolBarHorizontalExtensionButton: return m_toolBarHExtendButtonIcon;
case QStyle::SP_ToolBarVerticalExtensionButton : return m_toolBarVExtendButtonIcon; } return QStyle::standardIconImplementation(standardIcon, option, widget); }