基本Widgets(07):【类】QToolButton [官翻]

QToolButton是一个用于快速访问命令或选项的按钮,常用于QToolBar。它支持显示图标而非文本,并能根据状态改变显示。工具按钮可以设置为切换按钮,支持自动升起模式,以及三种弹出菜单模式。此外,它可以显示箭头并拥有自定义样式。通过setMenu()和setPopupMode()可设置关联菜单及其弹出行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QToolButton Class

QToolButton类提供了命令或选项的快速访问按钮,通常在QToolBar中使用。

Header#include < QToolButton >
qmakeQT += widgets
InheritsQAbstractButton
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's toolbar with tool buttons
Qt Assistant的工具栏包含与主窗口其他部分使用的操作相关的工具按钮。

公共类型

  • enum ToolButtonPopupMode { DelayedPopup, MenuButtonPopup, InstantPopup }
    描述如何弹出具有菜单集或包含操作列表的工具按钮的菜单。

    ConstantValueDescription
    DelayedPopup0按住工具按钮一段时间后(超时时间取决于样式,参见QStyle::SH_ToolButton_PopupDelay),弹出菜单。一个典型的应用程序示例是一些web浏览器工具栏中的“后退”按钮。如果用户单击它,浏览器将简单地返回到前一个页面。如果用户按下并按住按钮一段时间,工具按钮将显示一个包含当前历史列表的菜单
    MenuButtonPopup1在这种模式下,工具按钮显示一个特殊的箭头,表示有一个菜单。当按下按钮的箭头部分时,将显示菜单。
    InstantPopup2当按下工具按钮时,菜单立即显示出来。在这种模式下,按钮本身的动作不会被触发。

属性

  1. arrowType: Qt::ArrowType 按钮是否显示箭头而不是普通图标
    这将显示一个箭头作为QToolButton的图标。
    默认情况下,这个属性被设置为Qt::NoArrow。
    enum Qt::ArrowType

    ConstantValue
    Qt::NoArrow0
    Qt::UpArrow1
    Qt::DownArrow2
    Qt::LeftArrow3
    Qt::RightArrow4

    Access functions:

    • Qt::ArrowType arrowType() const
    • void setArrowType(Qt::ArrowType type)
  2. autoRaise: bool 是否启用自动抬起
    默认为禁用(即false)。当使用QMacStyle时,此属性目前在macOS上被忽略。
    Access functions:

    • bool autoRaise() const
    • void setAutoRaise(bool enable)
  3. popupMode: ToolButtonPopupMode 描述将弹出式菜单与工具按钮一起使用的方式
    默认情况下,此属性被设置为DelayedPopup。
    Access functions:

    • QToolButton::ToolButtonPopupMode popupMode() const
    • void setPopupMode(QToolButton::ToolButtonPopupMode mode)
  4. toolButtonStyle: Qt::ToolButtonStyle 仅显示图标、仅显示文本,还是显示图标旁边/下面的文本
    默认是Qt::ToolButtonIconOnly。

    要让工具按钮的样式跟随系统设置,设置这个属性为Qt::ToolButtonFollowStyle。在Unix上,将使用桌面环境中的用户设置。在其他平台上,Qt::ToolButtonFollowStyle意味着只使用图标。

    QToolButton自动将这个插槽连接到它所在的QMainWindow中的相关信号。

公共函数

构造析构

  1. QToolButton(QWidget *parent = nullptr)
  2. virtual ~QToolButton()

属性访问

  1. Qt::ArrowType arrowType() const
  2. void setArrowType(Qt::ArrowType type)
  3. bool autoRaise() const
  4. void setAutoRaise(bool enable)
  5. QToolButton::ToolButtonPopupMode popupMode() const
  6. void setPopupMode(QToolButton::ToolButtonPopupMode mode)
  7. Qt::ToolButtonStyle toolButtonStyle() const

特殊

  1. QAction * defaultAction() const
  2. QMenu * menu() const
  3. void setMenu(QMenu *menu)

重写的公共函数

  1. virtual QSize minimumSizeHint() const override
  2. virtual QSize sizeHint() const override

公共槽

  1. void setDefaultAction(QAction *action) 将默认动作设置为action
    如果一个工具按钮有一个默认的动作,这个动作定义了这个按钮的以下属性:

    • checked

    • enabled

    • font

    • icon

    • popupMode (假设该操作有一个菜单)

    • statusTip

    • text

    • toolTip

    • whatsThis
      其他属性(如autoRepeat)不受操作的影响。

  2. void setToolButtonStyle(Qt::ToolButtonStyle style)checkable 见属性

  3. void showMenu() 显示(弹出)相关的弹出菜单
    如果没有这样的菜单,这个函数将什么也不做。这个函数直到弹出菜单被用户关闭才会返回。

信号

  1. void triggered(QAction *action) 当给定的action被触发时,信号被发出
    该操作还可以与用户界面的其他部分相关联,例如菜单项和键盘快捷键。以这种方式共享操作有助于使用户界面更加一致,而且通常实现起来更省事。

保护的函数

  1. void initStyleOption(QStyleOptionToolButton *option) const

重写的保护的函数

  1. virtual void actionEvent(QActionEvent *event) override
  2. virtual void changeEvent(QEvent *e) override
  3. virtual void enterEvent(QEvent *e) override
  4. virtual bool event(QEvent *event) override
  5. virtual bool hitButton(const QPoint &pos) const override
  6. virtual void leaveEvent(QEvent *e) override
  7. virtual void mousePressEvent(QMouseEvent *e) override
  8. virtual void mouseReleaseEvent(QMouseEvent *e) override
  9. virtual void nextCheckState() override
  10. virtual void paintEvent(QPaintEvent *event) override
  11. 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();
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值