1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2016 The Qt Company Ltd. 4 ** Contact: https://www.qt.io/licensing/ 5 ** 6 ** This file is part of the QtWidgets module of the Qt Toolkit. 7 ** 8 ** $QT_BEGIN_LICENSE:LGPL$ 9 ** Commercial License Usage 10 ** Licensees holding valid commercial Qt licenses may use this file in 11 ** accordance with the commercial license agreement provided with the 12 ** Software or, alternatively, in accordance with the terms contained in 13 ** a written agreement between you and The Qt Company. For licensing terms 14 ** and conditions see https://www.qt.io/terms-conditions. For further 15 ** information use the contact form at https://www.qt.io/contact-us. 16 ** 17 ** GNU Lesser General Public License Usage 18 ** Alternatively, this file may be used under the terms of the GNU Lesser 19 ** General Public License version 3 as published by the Free Software 20 ** Foundation and appearing in the file LICENSE.LGPL3 included in the 21 ** packaging of this file. Please review the following information to 22 ** ensure the GNU Lesser General Public License version 3 requirements 23 ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. 24 ** 25 ** GNU General Public License Usage 26 ** Alternatively, this file may be used under the terms of the GNU 27 ** General Public License version 2.0 or (at your option) the GNU General 28 ** Public license version 3 or any later version approved by the KDE Free 29 ** Qt Foundation. The licenses are as published by the Free Software 30 ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 31 ** included in the packaging of this file. Please review the following 32 ** information to ensure the GNU General Public License requirements will 33 ** be met: https://www.gnu.org/licenses/gpl-2.0.html and 34 ** https://www.gnu.org/licenses/gpl-3.0.html. 35 ** 36 ** $QT_END_LICENSE$ 37 ** 38 ****************************************************************************/ 39 40 #ifndef QSHORTCUT_H 41 #define QSHORTCUT_H 42 43 #include <QtWidgets/qtwidgetsglobal.h> 44 #include <QtWidgets/qwidget.h> 45 #include <QtGui/qkeysequence.h> 46 47 QT_BEGIN_NAMESPACE 48 49 50 #ifndef QT_NO_SHORTCUT 51 52 class QShortcutPrivate; 53 class Q_WIDGETS_EXPORT QShortcut : public QObject 54 { 55 Q_OBJECT 56 Q_DECLARE_PRIVATE(QShortcut) 57 Q_PROPERTY(QKeySequence key READ key WRITE setKey) 58 Q_PROPERTY(QString whatsThis READ whatsThis WRITE setWhatsThis) 59 Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled) 60 Q_PROPERTY(bool autoRepeat READ autoRepeat WRITE setAutoRepeat) 61 Q_PROPERTY(Qt::ShortcutContext context READ context WRITE setContext) 62 public: 63 explicit QShortcut(QWidget *parent); 64 QShortcut(const QKeySequence &key, QWidget *parent, 65 const char *member = nullptr, const char *ambiguousMember = nullptr, 66 Qt::ShortcutContext shortcutContext = Qt::WindowShortcut); 67 #ifdef Q_CLANG_QDOC 68 template<typename Functor> 69 QShortcut(const QKeySequence &key, QWidget *parent, 70 Functor functor, 71 Qt::ShortcutContext shortcutContext = Qt::WindowShortcut); 72 template<typename Functor> 73 QShortcut(const QKeySequence &key, QWidget *parent, 74 const QObject *context, Functor functor, 75 Qt::ShortcutContext shortcutContext = Qt::WindowShortcut); 76 template<typename Functor, typename FunctorAmbiguous> 77 QShortcut(const QKeySequence &key, QWidget *parent, 78 const QObject *context1, Functor functor, 79 FunctorAmbiguous functorAmbiguous, 80 Qt::ShortcutContext shortcutContext = Qt::WindowShortcut); 81 template<typename Functor, typename FunctorAmbiguous> 82 QShortcut(const QKeySequence &key, QWidget *parent, 83 const QObject *context1, Functor functor, 84 const QObject *context2, FunctorAmbiguous functorAmbiguous, 85 Qt::ShortcutContext shortcutContext = Qt::WindowShortcut); 86 #else 87 template<typename Func1> 88 QShortcut(const QKeySequence &key, QWidget *parent, 89 Func1 slot1, 90 Qt::ShortcutContext context = Qt::WindowShortcut) QShortcut(key,parent,static_cast<const char * > (nullptr),static_cast<const char * > (nullptr),context)91 : QShortcut(key, parent, static_cast<const char*>(nullptr), static_cast<const char*>(nullptr), context) 92 { 93 connect(this, &QShortcut::activated, std::move(slot1)); 94 } 95 template<class Obj1, typename Func1> 96 QShortcut(const QKeySequence &key, QWidget *parent, 97 const Obj1 *object1, Func1 slot1, 98 Qt::ShortcutContext context = Qt::WindowShortcut, 99 typename std::enable_if<QtPrivate::IsPointerToTypeDerivedFromQObject<Obj1*>::Value>::type* = 0) QShortcut(key,parent,static_cast<const char * > (nullptr),static_cast<const char * > (nullptr),context)100 : QShortcut(key, parent, static_cast<const char*>(nullptr), static_cast<const char*>(nullptr), context) 101 { 102 connect(this, &QShortcut::activated, object1, std::move(slot1)); 103 } 104 template<class Obj1, typename Func1, typename Func2> 105 QShortcut(const QKeySequence &key, QWidget *parent, 106 const Obj1 *object1, Func1 slot1, Func2 slot2, 107 Qt::ShortcutContext context = Qt::WindowShortcut, 108 typename std::enable_if<QtPrivate::IsPointerToTypeDerivedFromQObject<Obj1*>::Value>::type* = 0) QShortcut(key,parent,static_cast<const char * > (nullptr),static_cast<const char * > (nullptr),context)109 : QShortcut(key, parent, static_cast<const char*>(nullptr), static_cast<const char*>(nullptr), context) 110 { 111 connect(this, &QShortcut::activated, object1, std::move(slot1)); 112 connect(this, &QShortcut::activatedAmbiguously, object1, std::move(slot2)); 113 } 114 template<class Obj1, typename Func1, class Obj2, typename Func2> 115 QShortcut(const QKeySequence &key, QWidget *parent, 116 const Obj1 *object1, Func1 slot1, 117 const Obj2 *object2, Func2 slot2, 118 Qt::ShortcutContext context = Qt::WindowShortcut, 119 typename std::enable_if<QtPrivate::IsPointerToTypeDerivedFromQObject<Obj1*>::Value>::type* = 0, 120 typename std::enable_if<QtPrivate::IsPointerToTypeDerivedFromQObject<Obj2*>::Value>::type* = 0) QShortcut(key,parent,static_cast<const char * > (nullptr),static_cast<const char * > (nullptr),context)121 : QShortcut(key, parent, static_cast<const char*>(nullptr), static_cast<const char*>(nullptr), context) 122 { 123 connect(this, &QShortcut::activated, object1, std::move(slot1)); 124 connect(this, &QShortcut::activatedAmbiguously, object2, std::move(slot2)); 125 } 126 #endif 127 ~QShortcut(); 128 129 void setKey(const QKeySequence& key); 130 QKeySequence key() const; 131 132 void setEnabled(bool enable); 133 bool isEnabled() const; 134 135 void setContext(Qt::ShortcutContext context); 136 Qt::ShortcutContext context() const; 137 138 void setWhatsThis(const QString &text); 139 QString whatsThis() const; 140 141 void setAutoRepeat(bool on); 142 bool autoRepeat() const; 143 144 int id() const; 145 parentWidget()146 inline QWidget *parentWidget() const 147 { return static_cast<QWidget *>(QObject::parent()); } 148 149 Q_SIGNALS: 150 void activated(); 151 void activatedAmbiguously(); 152 153 protected: 154 bool event(QEvent *e) override; 155 }; 156 157 #endif // QT_NO_SHORTCUT 158 159 QT_END_NAMESPACE 160 161 #endif // QSHORTCUT_H 162