1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QTOOLBUTTON_H
5#define QTOOLBUTTON_H
6
7#include <QtWidgets/qtwidgetsglobal.h>
8
9#include <QtWidgets/qabstractbutton.h>
10
11QT_REQUIRE_CONFIG(toolbutton);
12
13QT_BEGIN_NAMESPACE
14
15class QToolButtonPrivate;
16class QMenu;
17class QStyleOptionToolButton;
18
19class Q_WIDGETS_EXPORT QToolButton : public QAbstractButton
20{
21 Q_OBJECT
22 Q_ENUMS(Qt::ToolButtonStyle Qt::ArrowType)
23#if QT_CONFIG(menu)
24 Q_PROPERTY(ToolButtonPopupMode popupMode READ popupMode WRITE setPopupMode)
25#endif
26 Q_PROPERTY(Qt::ToolButtonStyle toolButtonStyle READ toolButtonStyle WRITE setToolButtonStyle)
27 Q_PROPERTY(bool autoRaise READ autoRaise WRITE setAutoRaise)
28 Q_PROPERTY(Qt::ArrowType arrowType READ arrowType WRITE setArrowType)
29
30public:
31 enum ToolButtonPopupMode {
32 DelayedPopup,
33 MenuButtonPopup,
34 InstantPopup
35 };
36 Q_ENUM(ToolButtonPopupMode)
37
38 explicit QToolButton(QWidget *parent = nullptr);
39 ~QToolButton();
40
41 QSize sizeHint() const override;
42 QSize minimumSizeHint() const override;
43
44 Qt::ToolButtonStyle toolButtonStyle() const;
45
46 Qt::ArrowType arrowType() const;
47 void setArrowType(Qt::ArrowType type);
48
49#if QT_CONFIG(menu)
50 void setMenu(QMenu* menu);
51 QMenu* menu() const;
52
53 void setPopupMode(ToolButtonPopupMode mode);
54 ToolButtonPopupMode popupMode() const;
55#endif
56
57 QAction *defaultAction() const;
58
59 void setAutoRaise(bool enable);
60 bool autoRaise() const;
61
62public Q_SLOTS:
63#if QT_CONFIG(menu)
64 void showMenu();
65#endif
66 void setToolButtonStyle(Qt::ToolButtonStyle style);
67 void setDefaultAction(QAction *);
68
69Q_SIGNALS:
70 void triggered(QAction *);
71
72protected:
73 bool event(QEvent *e) override;
74 void mousePressEvent(QMouseEvent *) override;
75 void mouseReleaseEvent(QMouseEvent *) override;
76 void paintEvent(QPaintEvent *) override;
77 void actionEvent(QActionEvent *) override;
78
79 void enterEvent(QEnterEvent *) override;
80 void leaveEvent(QEvent *) override;
81 void timerEvent(QTimerEvent *) override;
82 void changeEvent(QEvent *) override;
83
84 bool hitButton(const QPoint &pos) const override;
85 void checkStateSet() override;
86 void nextCheckState() override;
87 virtual void initStyleOption(QStyleOptionToolButton *option) const;
88
89private:
90 Q_DISABLE_COPY(QToolButton)
91 Q_DECLARE_PRIVATE(QToolButton)
92#if QT_CONFIG(menu)
93 Q_PRIVATE_SLOT(d_func(), void _q_buttonPressed())
94 Q_PRIVATE_SLOT(d_func(), void _q_buttonReleased())
95 Q_PRIVATE_SLOT(d_func(), void _q_updateButtonDown())
96 Q_PRIVATE_SLOT(d_func(), void _q_menuTriggered(QAction*))
97#endif
98 Q_PRIVATE_SLOT(d_func(), void _q_actionTriggered())
99
100};
101
102QT_END_NAMESPACE
103
104#endif // QTOOLBUTTON_H
105

source code of qtbase/src/widgets/widgets/qtoolbutton.h