QToolButton Class
QToolButton类提供了命令或选项的快速访问按钮,通常在QToolBar中使用。
Header | #include < QToolButton > |
---|---|
qmake | QT += widgets |
Inherits | QAbstractButton |
Inherited By |
详细说明
工具按钮是一种特殊的按钮,它提供对特定命令或选项的快速访问。与普通的命令按钮不同,工具按钮通常不显示文本标签,而是显示一个图标。
当使用QToolBar::addAction()创建新的QAction实例或使用QToolBar::addAction()将现有操作添加到工具栏时,通常会创建工具按钮。还可以以与任何其他小部件相同的方式构造工具按钮,并在布局中将它们与其他小部件一起排列。
工具按钮的一个典型用法是选择工具;例如,绘图程序中的“钢笔”工具。这可以通过使用QToolButton作为切换按钮来实现(参见setCheckable())。
QToolButton支持auto-raising。在自动升起模式下,只有当鼠标指向该按钮时,该按钮才绘制3D帧。当在QToolBar中使用按钮时,该特性将自动打开。用setAutoRaise()替换它。
工具按钮的图标设置为QIcon。这使得可以为禁用状态和激活状态指定不同的像素图。当按钮的功能不可用时,禁用的像素图将被使用。当鼠标指针悬停在按钮上,按钮自动弹出时,活动的像素图将显示出来。
该按钮的外观和尺寸可以通过setToolButtonStyle()和setIconSize()进行调整。当在QMainWindow的QToolBar中使用时,该按钮会自动调整到QMainWindow的设置(参见QMainWindow::setToolButtonStyle()和QMainWindow:: setIconSize())。除了图标,工具按钮还可以显示用arrowType指定的箭头符号。
工具按钮可以在弹出菜单中提供额外的选择。可以使用setMenu()设置弹出菜单。使用setPopupMode()来配置工具按钮的不同模式。默认模式是DelayedPopupMode,有时在web浏览器中与“Back”按钮一起使用。在按下并按住按钮一段时间后,会弹出一个菜单,显示可以跳转的页面列表。超时取决于样式,参见QStyle::SH_ToolButton_PopupDelay。
![]() |
---|
Qt Assistant的工具栏包含与主窗口其他部分使用的操作相关的工具按钮。 |
公共类型
-
enum ToolButtonPopupMode { DelayedPopup, MenuButtonPopup, InstantPopup }
描述如何弹出具有菜单集或包含操作列表的工具按钮的菜单。Constant Value Description DelayedPopup 0 按住工具按钮一段时间后(超时时间取决于样式,参见QStyle::SH_ToolButton_PopupDelay),弹出菜单。一个典型的应用程序示例是一些web浏览器工具栏中的“后退”按钮。如果用户单击它,浏览器将简单地返回到前一个页面。如果用户按下并按住按钮一段时间,工具按钮将显示一个包含当前历史列表的菜单 MenuButtonPopup 1 在这种模式下,工具按钮显示一个特殊的箭头,表示有一个菜单。当按下按钮的箭头部分时,将显示菜单。 InstantPopup 2 当按下工具按钮时,菜单立即显示出来。在这种模式下,按钮本身的动作不会被触发。
属性
-
arrowType: Qt::ArrowType 按钮是否显示箭头而不是普通图标
这将显示一个箭头作为QToolButton的图标。
默认情况下,这个属性被设置为Qt::NoArrow。
enum Qt::ArrowTypeConstant Value Qt::NoArrow 0 Qt::UpArrow 1 Qt::DownArrow 2 Qt::LeftArrow 3 Qt::RightArrow 4 Access functions:
- Qt::ArrowType arrowType() const
- void setArrowType(Qt::ArrowType type)
-
autoRaise: bool 是否启用自动抬起。
默认为禁用(即false)。当使用QMacStyle时,此属性目前在macOS上被忽略。
Access functions:- bool autoRaise() const
- void setAutoRaise(bool enable)
-
popupMode: ToolButtonPopupMode 描述将弹出式菜单与工具按钮一起使用的方式
默认情况下,此属性被设置为DelayedPopup。
Access functions:- QToolButton::ToolButtonPopupMode popupMode() const
- void setPopupMode(QToolButton::ToolButtonPopupMode mode)
-
toolButtonStyle: Qt::ToolButtonStyle 仅显示图标、仅显示文本,还是显示图标旁边/下面的文本
默认是Qt::ToolButtonIconOnly。要让工具按钮的样式跟随系统设置,设置这个属性为Qt::ToolButtonFollowStyle。在Unix上,将使用桌面环境中的用户设置。在其他平台上,Qt::ToolButtonFollowStyle意味着只使用图标。
QToolButton自动将这个插槽连接到它所在的QMainWindow中的相关信号。
公共函数
构造析构
- QToolButton(QWidget *parent = nullptr)
- virtual ~QToolButton()
属性访问
- Qt::ArrowType arrowType() const
- void setArrowType(Qt::ArrowType type)
- bool autoRaise() const
- void setAutoRaise(bool enable)
- QToolButton::ToolButtonPopupMode popupMode() const
- void setPopupMode(QToolButton::ToolButtonPopupMode mode)
- Qt::ToolButtonStyle toolButtonStyle() const
特殊
- QAction * defaultAction() const
- QMenu * menu() const
- void setMenu(QMenu *menu)
重写的公共函数
- virtual QSize minimumSizeHint() const override
- virtual QSize sizeHint() const override
公共槽
-
void setDefaultAction(QAction *action) 将默认动作设置为action
如果一个工具按钮有一个默认的动作,这个动作定义了这个按钮的以下属性:-
checked
-
enabled
-
font
-
icon
-
popupMode (假设该操作有一个菜单)
-
statusTip
-
text
-
toolTip
-
whatsThis
其他属性(如autoRepeat)不受操作的影响。
-
-
void setToolButtonStyle(Qt::ToolButtonStyle style)checkable 见属性
-
void showMenu() 显示(弹出)相关的弹出菜单
如果没有这样的菜单,这个函数将什么也不做。这个函数直到弹出菜单被用户关闭才会返回。
信号
- void triggered(QAction *action) 当给定的action被触发时,信号被发出
该操作还可以与用户界面的其他部分相关联,例如菜单项和键盘快捷键。以这种方式共享操作有助于使用户界面更加一致,而且通常实现起来更省事。
保护的函数
- void initStyleOption(QStyleOptionToolButton *option) const
重写的保护的函数
- virtual void actionEvent(QActionEvent *event) override
- virtual void changeEvent(QEvent *e) override
- virtual void enterEvent(QEvent *e) override
- virtual bool event(QEvent *event) override
- virtual bool hitButton(const QPoint &pos) const override
- virtual void leaveEvent(QEvent *e) override
- virtual void mousePressEvent(QMouseEvent *e) override
- virtual void mouseReleaseEvent(QMouseEvent *e) override
- virtual void nextCheckState() override
- virtual void paintEvent(QPaintEvent *event) override
- virtual void timerEvent(QTimerEvent *e) override
小案例
#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
a.setApplicationName ("QRadioButton");
QWidget w;
QToolButton cb1,cb2,cb3;
QMenu menu("Tool");
menu.addAction ("Pen");
menu.addAction ("Pencil");
cb1.setMenu (&menu);
cb1.setPopupMode (QToolButton::DelayedPopup);
cb2.setMenu (&menu);
cb2.setPopupMode (QToolButton::MenuButtonPopup);
cb3.setMenu (&menu);
cb3.setPopupMode (QToolButton::InstantPopup);
QCommonStyle cs;
QIcon icon = cs.standardIcon ((QStyle::StandardPixmap) 0);
cb1.setIcon (icon);
icon = cs.standardIcon ((QStyle::StandardPixmap) 13);
cb2.setIcon (icon);
icon = cs.standardIcon ((QStyle::StandardPixmap) 34);
cb3.setIcon (icon);
// cb1.setArrowType (Qt::UpArrow);
// cb2.setArrowType (Qt::LeftArrow);
// cb3.setArrowType (Qt::RightArrow);
QHBoxLayout mainLayout;
mainLayout.addWidget (&cb1);
mainLayout.addWidget (&cb2);
mainLayout.addWidget (&cb3);
w.setLayout (&mainLayout);
w.resize (300,20);
w.show ();
return a.exec();
}