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 QtGui 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 QEVENT_H 41 #define QEVENT_H 42 43 #include <QtGui/qtguiglobal.h> 44 #include <QtGui/qwindowdefs.h> 45 #include <QtGui/qregion.h> 46 #include <QtCore/qnamespace.h> 47 #include <QtCore/qstring.h> 48 #include <QtGui/qkeysequence.h> 49 #include <QtCore/qcoreevent.h> 50 #include <QtCore/qvariant.h> 51 #include <QtCore/qmap.h> // ### Qt 6: Remove 52 #include <QtCore/qvector.h> 53 #include <QtCore/qset.h> // ### Qt 6: Remove 54 #include <QtCore/qurl.h> 55 #include <QtCore/qfile.h> // ### Qt 6: Replace by <QtCore/qiodevice.h> and forward declare QFile 56 #include <QtGui/qvector2d.h> 57 #include <QtGui/qtouchdevice.h> // ### Qt 6: Replace by forward declaration 58 59 QT_BEGIN_NAMESPACE 60 61 62 class QAction; 63 #ifndef QT_NO_GESTURES 64 class QGesture; 65 #endif 66 class QScreen; 67 68 class Q_GUI_EXPORT QInputEvent : public QEvent 69 { 70 public: 71 explicit QInputEvent(Type type, Qt::KeyboardModifiers modifiers = Qt::NoModifier); 72 ~QInputEvent(); modifiers()73 inline Qt::KeyboardModifiers modifiers() const { return modState; } setModifiers(Qt::KeyboardModifiers amodifiers)74 inline void setModifiers(Qt::KeyboardModifiers amodifiers) { modState = amodifiers; } timestamp()75 inline ulong timestamp() const { return ts; } setTimestamp(ulong atimestamp)76 inline void setTimestamp(ulong atimestamp) { ts = atimestamp; } 77 protected: 78 Qt::KeyboardModifiers modState; 79 ulong ts; 80 }; 81 82 class Q_GUI_EXPORT QEnterEvent : public QEvent 83 { 84 public: 85 QEnterEvent(const QPointF &localPos, const QPointF &windowPos, const QPointF &screenPos); 86 ~QEnterEvent(); 87 88 #ifndef QT_NO_INTEGER_EVENT_COORDINATES pos()89 inline QPoint pos() const { return l.toPoint(); } globalPos()90 inline QPoint globalPos() const { return s.toPoint(); } x()91 inline int x() const { return qRound(l.x()); } y()92 inline int y() const { return qRound(l.y()); } globalX()93 inline int globalX() const { return qRound(s.x()); } globalY()94 inline int globalY() const { return qRound(s.y()); } 95 #endif localPos()96 const QPointF &localPos() const { return l; } windowPos()97 const QPointF &windowPos() const { return w; } screenPos()98 const QPointF &screenPos() const { return s; } 99 100 protected: 101 QPointF l, w, s; 102 }; 103 104 class Q_GUI_EXPORT QMouseEvent : public QInputEvent 105 { 106 public: 107 QMouseEvent(Type type, const QPointF &localPos, Qt::MouseButton button, 108 Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers); 109 QMouseEvent(Type type, const QPointF &localPos, const QPointF &screenPos, 110 Qt::MouseButton button, Qt::MouseButtons buttons, 111 Qt::KeyboardModifiers modifiers); 112 QMouseEvent(Type type, const QPointF &localPos, const QPointF &windowPos, const QPointF &screenPos, 113 Qt::MouseButton button, Qt::MouseButtons buttons, 114 Qt::KeyboardModifiers modifiers); 115 QMouseEvent(Type type, const QPointF &localPos, const QPointF &windowPos, const QPointF &screenPos, 116 Qt::MouseButton button, Qt::MouseButtons buttons, 117 Qt::KeyboardModifiers modifiers, Qt::MouseEventSource source); 118 ~QMouseEvent(); 119 120 #ifndef QT_NO_INTEGER_EVENT_COORDINATES pos()121 inline QPoint pos() const { return l.toPoint(); } globalPos()122 inline QPoint globalPos() const { return s.toPoint(); } x()123 inline int x() const { return qRound(l.x()); } y()124 inline int y() const { return qRound(l.y()); } globalX()125 inline int globalX() const { return qRound(s.x()); } globalY()126 inline int globalY() const { return qRound(s.y()); } 127 #endif localPos()128 const QPointF &localPos() const { return l; } windowPos()129 const QPointF &windowPos() const { return w; } screenPos()130 const QPointF &screenPos() const { return s; } 131 button()132 inline Qt::MouseButton button() const { return b; } buttons()133 inline Qt::MouseButtons buttons() const { return mouseState; } 134 setLocalPos(const QPointF & localPosition)135 inline void setLocalPos(const QPointF &localPosition) { l = localPosition; } 136 137 #if QT_DEPRECATED_SINCE(5, 0) posF()138 QT_DEPRECATED inline QPointF posF() const { return l; } 139 #endif 140 141 Qt::MouseEventSource source() const; 142 Qt::MouseEventFlags flags() const; 143 144 protected: 145 QPointF l, w, s; 146 Qt::MouseButton b; 147 Qt::MouseButtons mouseState; 148 int caps; 149 QVector2D velocity; 150 151 friend class QGuiApplicationPrivate; 152 }; 153 154 class Q_GUI_EXPORT QHoverEvent : public QInputEvent 155 { 156 public: 157 QHoverEvent(Type type, const QPointF &pos, const QPointF &oldPos, Qt::KeyboardModifiers modifiers = Qt::NoModifier); 158 ~QHoverEvent(); 159 160 #ifndef QT_NO_INTEGER_EVENT_COORDINATES pos()161 inline QPoint pos() const { return p.toPoint(); } oldPos()162 inline QPoint oldPos() const { return op.toPoint(); } 163 #endif 164 posF()165 inline const QPointF &posF() const { return p; } oldPosF()166 inline const QPointF &oldPosF() const { return op; } 167 168 protected: 169 QPointF p, op; 170 }; 171 172 #if QT_CONFIG(wheelevent) 173 class Q_GUI_EXPORT QWheelEvent : public QInputEvent 174 { 175 public: 176 enum { DefaultDeltasPerStep = 120 }; 177 178 #if QT_DEPRECATED_SINCE(5, 15) 179 // Actually deprecated since 5.0, in docs 180 QT_DEPRECATED_VERSION_X_5_15("Use the last QWheelEvent constructor taking pixelDelta, angleDelta, phase, and inverted") 181 QWheelEvent(const QPointF &pos, int delta, 182 Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, 183 Qt::Orientation orient = Qt::Vertical); 184 // Actually deprecated since 5.0, in docs 185 QT_DEPRECATED_VERSION_X_5_15("Use the last QWheelEvent constructor taking pixelDelta, angleDelta, phase, and inverted") 186 QWheelEvent(const QPointF &pos, const QPointF& globalPos, int delta, 187 Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, 188 Qt::Orientation orient = Qt::Vertical); 189 QT_DEPRECATED_VERSION_X_5_15("Use the last QWheelEvent constructor taking pixelDelta, angleDelta, phase, and inverted") 190 QWheelEvent(const QPointF &pos, const QPointF& globalPos, 191 QPoint pixelDelta, QPoint angleDelta, int qt4Delta, Qt::Orientation qt4Orientation, 192 Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers); 193 QT_DEPRECATED_VERSION_X_5_15("Use the last QWheelEvent constructor taking pixelDelta, angleDelta, phase, and inverted") 194 QWheelEvent(const QPointF &pos, const QPointF& globalPos, 195 QPoint pixelDelta, QPoint angleDelta, int qt4Delta, Qt::Orientation qt4Orientation, 196 Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Qt::ScrollPhase phase); 197 QT_DEPRECATED_VERSION_X_5_15("Use the last QWheelEvent constructor taking pixelDelta, angleDelta, phase, and inverted") 198 QWheelEvent(const QPointF &pos, const QPointF &globalPos, QPoint pixelDelta, QPoint angleDelta, 199 int qt4Delta, Qt::Orientation qt4Orientation, Qt::MouseButtons buttons, 200 Qt::KeyboardModifiers modifiers, Qt::ScrollPhase phase, Qt::MouseEventSource source); 201 QT_DEPRECATED_VERSION_X_5_15("Use the last QWheelEvent constructor taking pixelDelta, angleDelta, phase, and inverted") 202 QWheelEvent(const QPointF &pos, const QPointF &globalPos, QPoint pixelDelta, QPoint angleDelta, 203 int qt4Delta, Qt::Orientation qt4Orientation, Qt::MouseButtons buttons, 204 Qt::KeyboardModifiers modifiers, Qt::ScrollPhase phase, Qt::MouseEventSource source, bool inverted); 205 #endif 206 207 QWheelEvent(QPointF pos, QPointF globalPos, QPoint pixelDelta, QPoint angleDelta, 208 Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Qt::ScrollPhase phase, 209 bool inverted, Qt::MouseEventSource source = Qt::MouseEventNotSynthesized); 210 ~QWheelEvent(); 211 212 pixelDelta()213 inline QPoint pixelDelta() const { return pixelD; } angleDelta()214 inline QPoint angleDelta() const { return angleD; } 215 216 #if QT_DEPRECATED_SINCE(5, 15) 217 // Actually deprecated since 5.0, in docs 218 QT_DEPRECATED_VERSION_X_5_15("Use angleDelta()") delta()219 inline int delta() const { return qt4D; } 220 // Actually deprecated since 5.0, in docs 221 QT_DEPRECATED_VERSION_X_5_15("Use angleDelta()") orientation()222 inline Qt::Orientation orientation() const { return qt4O; } 223 #ifndef QT_NO_INTEGER_EVENT_COORDINATES 224 QT_DEPRECATED_VERSION_X_5_15("Use position()") pos()225 inline QPoint pos() const { return p.toPoint(); } 226 QT_DEPRECATED_VERSION_X_5_15("Use globalPosition()") globalPos()227 inline QPoint globalPos() const { return g.toPoint(); } 228 QT_DEPRECATED_VERSION_X_5_15("Use position()") x()229 inline int x() const { return int(p.x()); } 230 QT_DEPRECATED_VERSION_X_5_15("Use position()") y()231 inline int y() const { return int(p.y()); } 232 QT_DEPRECATED_VERSION_X_5_15("Use globalPosition()") globalX()233 inline int globalX() const { return int(g.x()); } 234 QT_DEPRECATED_VERSION_X_5_15("Use globalPosition()") globalY()235 inline int globalY() const { return int(g.y()); } 236 #endif 237 QT_DEPRECATED_VERSION_X_5_15("Use position()") posF()238 inline const QPointF &posF() const { return p; } 239 QT_DEPRECATED_VERSION_X_5_15("Use globalPosition()") globalPosF()240 inline const QPointF &globalPosF() const { return g; } 241 #endif // QT_DEPRECATED_SINCE(5, 15) 242 position()243 inline QPointF position() const { return p; } globalPosition()244 inline QPointF globalPosition() const { return g; } 245 buttons()246 inline Qt::MouseButtons buttons() const { return mouseState; } 247 phase()248 inline Qt::ScrollPhase phase() const { return Qt::ScrollPhase(ph); } inverted()249 inline bool inverted() const { return invertedScrolling; } 250 source()251 Qt::MouseEventSource source() const { return Qt::MouseEventSource(src); } 252 253 protected: 254 QPointF p; 255 QPointF g; 256 QPoint pixelD; 257 QPoint angleD; 258 int qt4D = 0; 259 Qt::Orientation qt4O = Qt::Vertical; 260 Qt::MouseButtons mouseState = Qt::NoButton; 261 uint _unused_ : 2; // Kept for binary compatibility 262 uint src: 2; 263 bool invertedScrolling : 1; 264 uint ph : 3; 265 int reserved : 24; 266 267 friend class QApplication; 268 }; 269 #endif 270 271 #if QT_CONFIG(tabletevent) 272 class Q_GUI_EXPORT QTabletEvent : public QInputEvent 273 { 274 Q_GADGET 275 public: 276 enum TabletDevice { NoDevice, Puck, Stylus, Airbrush, FourDMouse, 277 XFreeEraser /*internal*/, RotationStylus }; 278 Q_ENUM(TabletDevice) 279 enum PointerType { UnknownPointer, Pen, Cursor, Eraser }; 280 Q_ENUM(PointerType) 281 282 #if QT_DEPRECATED_SINCE(5, 15) 283 // Actually deprecated since 5.4, in docs 284 QT_DEPRECATED_VERSION_X_5_15("Use the other QTabletEvent constructor") 285 QTabletEvent(Type t, const QPointF &pos, const QPointF &globalPos, 286 int device, int pointerType, qreal pressure, int xTilt, int yTilt, 287 qreal tangentialPressure, qreal rotation, int z, 288 Qt::KeyboardModifiers keyState, qint64 uniqueID); // ### remove in Qt 6 289 #endif 290 QTabletEvent(Type t, const QPointF &pos, const QPointF &globalPos, 291 int device, int pointerType, qreal pressure, int xTilt, int yTilt, 292 qreal tangentialPressure, qreal rotation, int z, 293 Qt::KeyboardModifiers keyState, qint64 uniqueID, 294 Qt::MouseButton button, Qt::MouseButtons buttons); 295 ~QTabletEvent(); 296 pos()297 inline QPoint pos() const { return mPos.toPoint(); } globalPos()298 inline QPoint globalPos() const { return mGPos.toPoint(); } 299 #if QT_DEPRECATED_SINCE(5,0) hiResGlobalPos()300 QT_DEPRECATED inline const QPointF &hiResGlobalPos() const { return mPos; } 301 #endif 302 posF()303 inline const QPointF &posF() const { return mPos; } globalPosF()304 inline const QPointF &globalPosF() const { return mGPos; } 305 x()306 inline int x() const { return qRound(mPos.x()); } y()307 inline int y() const { return qRound(mPos.y()); } globalX()308 inline int globalX() const { return qRound(mGPos.x()); } globalY()309 inline int globalY() const { return qRound(mGPos.y()); } 310 #if QT_DEPRECATED_SINCE(5, 15) 311 QT_DEPRECATED_VERSION_X_5_15("use globalPosF().x()") hiResGlobalX()312 inline qreal hiResGlobalX() const { return mGPos.x(); } 313 QT_DEPRECATED_VERSION_X_5_15("use globalPosF().y()") hiResGlobalY()314 inline qreal hiResGlobalY() const { return mGPos.y(); } 315 QT_DEPRECATED_VERSION_X_5_15("Use deviceType()") device()316 inline TabletDevice device() const { return TabletDevice(mDev); } 317 #endif deviceType()318 inline TabletDevice deviceType() const { return TabletDevice(mDev); } pointerType()319 inline PointerType pointerType() const { return PointerType(mPointerType); } uniqueId()320 inline qint64 uniqueId() const { return mUnique; } pressure()321 inline qreal pressure() const { return mPress; } z()322 inline int z() const { return mZ; } tangentialPressure()323 inline qreal tangentialPressure() const { return mTangential; } rotation()324 inline qreal rotation() const { return mRot; } xTilt()325 inline int xTilt() const { return mXT; } yTilt()326 inline int yTilt() const { return mYT; } 327 Qt::MouseButton button() const; 328 Qt::MouseButtons buttons() const; 329 330 protected: 331 QPointF mPos, mGPos; 332 int mDev, mPointerType, mXT, mYT, mZ; 333 qreal mPress, mTangential, mRot; 334 qint64 mUnique; 335 336 // QTabletEventPrivate for extra storage. 337 // ### Qt 6: QPointingEvent will have Buttons, QTabletEvent will inherit 338 void *mExtra; 339 }; 340 #endif // QT_CONFIG(tabletevent) 341 342 #ifndef QT_NO_GESTURES 343 class Q_GUI_EXPORT QNativeGestureEvent : public QInputEvent 344 { 345 public: 346 #if QT_DEPRECATED_SINCE(5, 10) 347 QT_DEPRECATED QNativeGestureEvent(Qt::NativeGestureType type, const QPointF &localPos, const QPointF &windowPos, 348 const QPointF &screenPos, qreal value, ulong sequenceId, quint64 intArgument); 349 #endif 350 QNativeGestureEvent(Qt::NativeGestureType type, const QTouchDevice *dev, const QPointF &localPos, const QPointF &windowPos, 351 const QPointF &screenPos, qreal value, ulong sequenceId, quint64 intArgument); 352 ~QNativeGestureEvent(); gestureType()353 Qt::NativeGestureType gestureType() const { return mGestureType; } value()354 qreal value() const { return mRealValue; } 355 356 #ifndef QT_NO_INTEGER_EVENT_COORDINATES pos()357 inline const QPoint pos() const { return mLocalPos.toPoint(); } globalPos()358 inline const QPoint globalPos() const { return mScreenPos.toPoint(); } 359 #endif localPos()360 const QPointF &localPos() const { return mLocalPos; } windowPos()361 const QPointF &windowPos() const { return mWindowPos; } screenPos()362 const QPointF &screenPos() const { return mScreenPos; } 363 364 const QTouchDevice *device() const; 365 366 protected: 367 Qt::NativeGestureType mGestureType; 368 QPointF mLocalPos; 369 QPointF mWindowPos; 370 QPointF mScreenPos; 371 qreal mRealValue; 372 ulong mSequenceId; 373 quint64 mIntValue; 374 }; 375 #endif // QT_NO_GESTURES 376 377 class Q_GUI_EXPORT QKeyEvent : public QInputEvent 378 { 379 public: 380 QKeyEvent(Type type, int key, Qt::KeyboardModifiers modifiers, const QString& text = QString(), 381 bool autorep = false, ushort count = 1); 382 QKeyEvent(Type type, int key, Qt::KeyboardModifiers modifiers, 383 quint32 nativeScanCode, quint32 nativeVirtualKey, quint32 nativeModifiers, 384 const QString &text = QString(), bool autorep = false, ushort count = 1); 385 ~QKeyEvent(); 386 key()387 int key() const { return k; } 388 #ifndef QT_NO_SHORTCUT 389 bool matches(QKeySequence::StandardKey key) const; 390 #endif 391 Qt::KeyboardModifiers modifiers() const; text()392 inline QString text() const { return txt; } isAutoRepeat()393 inline bool isAutoRepeat() const { return autor; } count()394 inline int count() const { return int(c); } 395 nativeScanCode()396 inline quint32 nativeScanCode() const { return nScanCode; } nativeVirtualKey()397 inline quint32 nativeVirtualKey() const { return nVirtualKey; } nativeModifiers()398 inline quint32 nativeModifiers() const { return nModifiers; } 399 400 // Functions for the extended key event information 401 #if QT_DEPRECATED_SINCE(5, 0) 402 static inline QKeyEvent *createExtendedKeyEvent(Type type, int key, Qt::KeyboardModifiers modifiers, 403 quint32 nativeScanCode, quint32 nativeVirtualKey, 404 quint32 nativeModifiers, 405 const QString& text = QString(), bool autorep = false, 406 ushort count = 1) 407 { 408 return new QKeyEvent(type, key, modifiers, 409 nativeScanCode, nativeVirtualKey, nativeModifiers, 410 text, autorep, count); 411 } 412 hasExtendedInfo()413 inline bool hasExtendedInfo() const { return true; } 414 #endif 415 416 protected: 417 QString txt; 418 int k; 419 quint32 nScanCode; 420 quint32 nVirtualKey; 421 quint32 nModifiers; 422 ushort c; 423 ushort autor:1; 424 // ushort reserved:15; 425 }; 426 427 428 class Q_GUI_EXPORT QFocusEvent : public QEvent 429 { 430 public: 431 explicit QFocusEvent(Type type, Qt::FocusReason reason=Qt::OtherFocusReason); 432 ~QFocusEvent(); 433 gotFocus()434 inline bool gotFocus() const { return type() == FocusIn; } lostFocus()435 inline bool lostFocus() const { return type() == FocusOut; } 436 437 Qt::FocusReason reason() const; 438 439 private: 440 Qt::FocusReason m_reason; 441 }; 442 443 444 class Q_GUI_EXPORT QPaintEvent : public QEvent 445 { 446 public: 447 explicit QPaintEvent(const QRegion& paintRegion); 448 explicit QPaintEvent(const QRect &paintRect); 449 ~QPaintEvent(); 450 rect()451 inline const QRect &rect() const { return m_rect; } region()452 inline const QRegion ®ion() const { return m_region; } 453 454 protected: 455 QRect m_rect; 456 QRegion m_region; 457 bool m_erased; 458 }; 459 460 class Q_GUI_EXPORT QMoveEvent : public QEvent 461 { 462 public: 463 QMoveEvent(const QPoint &pos, const QPoint &oldPos); 464 ~QMoveEvent(); 465 pos()466 inline const QPoint &pos() const { return p; } oldPos()467 inline const QPoint &oldPos() const { return oldp;} 468 protected: 469 QPoint p, oldp; 470 friend class QApplication; 471 }; 472 473 class Q_GUI_EXPORT QExposeEvent : public QEvent 474 { 475 public: 476 explicit QExposeEvent(const QRegion &rgn); 477 ~QExposeEvent(); 478 region()479 inline const QRegion ®ion() const { return rgn; } 480 481 protected: 482 QRegion rgn; 483 }; 484 485 class Q_GUI_EXPORT QPlatformSurfaceEvent : public QEvent 486 { 487 public: 488 enum SurfaceEventType { 489 SurfaceCreated, 490 SurfaceAboutToBeDestroyed 491 }; 492 493 explicit QPlatformSurfaceEvent(SurfaceEventType surfaceEventType); 494 ~QPlatformSurfaceEvent(); 495 surfaceEventType()496 inline SurfaceEventType surfaceEventType() const { return m_surfaceEventType; } 497 498 protected: 499 SurfaceEventType m_surfaceEventType; 500 }; 501 502 class Q_GUI_EXPORT QResizeEvent : public QEvent 503 { 504 public: 505 QResizeEvent(const QSize &size, const QSize &oldSize); 506 ~QResizeEvent(); 507 size()508 inline const QSize &size() const { return s; } oldSize()509 inline const QSize &oldSize()const { return olds;} 510 protected: 511 QSize s, olds; 512 friend class QApplication; 513 }; 514 515 516 class Q_GUI_EXPORT QCloseEvent : public QEvent 517 { 518 public: 519 QCloseEvent(); 520 ~QCloseEvent(); 521 }; 522 523 524 class Q_GUI_EXPORT QIconDragEvent : public QEvent 525 { 526 public: 527 QIconDragEvent(); 528 ~QIconDragEvent(); 529 }; 530 531 532 class Q_GUI_EXPORT QShowEvent : public QEvent 533 { 534 public: 535 QShowEvent(); 536 ~QShowEvent(); 537 }; 538 539 540 class Q_GUI_EXPORT QHideEvent : public QEvent 541 { 542 public: 543 QHideEvent(); 544 ~QHideEvent(); 545 }; 546 547 #ifndef QT_NO_CONTEXTMENU 548 class Q_GUI_EXPORT QContextMenuEvent : public QInputEvent 549 { 550 public: 551 enum Reason { Mouse, Keyboard, Other }; 552 553 QContextMenuEvent(Reason reason, const QPoint &pos, const QPoint &globalPos, 554 Qt::KeyboardModifiers modifiers); 555 QContextMenuEvent(Reason reason, const QPoint &pos, const QPoint &globalPos); 556 QContextMenuEvent(Reason reason, const QPoint &pos); 557 ~QContextMenuEvent(); 558 x()559 inline int x() const { return p.x(); } y()560 inline int y() const { return p.y(); } globalX()561 inline int globalX() const { return gp.x(); } globalY()562 inline int globalY() const { return gp.y(); } 563 pos()564 inline const QPoint& pos() const { return p; } globalPos()565 inline const QPoint& globalPos() const { return gp; } 566 reason()567 inline Reason reason() const { return Reason(reas); } 568 569 protected: 570 QPoint p; 571 QPoint gp; 572 uint reas : 8; 573 }; 574 #endif // QT_NO_CONTEXTMENU 575 576 #ifndef QT_NO_INPUTMETHOD 577 class Q_GUI_EXPORT QInputMethodEvent : public QEvent 578 { 579 public: 580 enum AttributeType { 581 TextFormat, 582 Cursor, 583 Language, 584 Ruby, 585 Selection 586 }; 587 class Attribute { 588 public: Attribute(AttributeType typ,int s,int l,QVariant val)589 Attribute(AttributeType typ, int s, int l, QVariant val) : type(typ), start(s), length(l), value(std::move(val)) {} Attribute(AttributeType typ,int s,int l)590 Attribute(AttributeType typ, int s, int l) : type(typ), start(s), length(l), value() {} 591 592 AttributeType type; 593 int start; 594 int length; 595 QVariant value; 596 }; 597 QInputMethodEvent(); 598 QInputMethodEvent(const QString &preeditText, const QList<Attribute> &attributes); 599 ~QInputMethodEvent(); 600 601 void setCommitString(const QString &commitString, int replaceFrom = 0, int replaceLength = 0); attributes()602 inline const QList<Attribute> &attributes() const { return attrs; } preeditString()603 inline const QString &preeditString() const { return preedit; } 604 commitString()605 inline const QString &commitString() const { return commit; } replacementStart()606 inline int replacementStart() const { return replace_from; } replacementLength()607 inline int replacementLength() const { return replace_length; } 608 609 QInputMethodEvent(const QInputMethodEvent &other); 610 611 private: 612 QString preedit; 613 QList<Attribute> attrs; 614 QString commit; 615 int replace_from; 616 int replace_length; 617 }; 618 Q_DECLARE_TYPEINFO(QInputMethodEvent::Attribute, Q_MOVABLE_TYPE); 619 620 class Q_GUI_EXPORT QInputMethodQueryEvent : public QEvent 621 { 622 public: 623 explicit QInputMethodQueryEvent(Qt::InputMethodQueries queries); 624 ~QInputMethodQueryEvent(); 625 queries()626 Qt::InputMethodQueries queries() const { return m_queries; } 627 628 void setValue(Qt::InputMethodQuery query, const QVariant &value); 629 QVariant value(Qt::InputMethodQuery query) const; 630 private: 631 Qt::InputMethodQueries m_queries; 632 struct QueryPair { 633 Qt::InputMethodQuery query; 634 QVariant value; 635 }; 636 friend QTypeInfo<QueryPair>; 637 QVector<QueryPair> m_values; 638 }; 639 Q_DECLARE_TYPEINFO(QInputMethodQueryEvent::QueryPair, Q_MOVABLE_TYPE); 640 641 #endif // QT_NO_INPUTMETHOD 642 643 #if QT_CONFIG(draganddrop) 644 645 class QMimeData; 646 647 class Q_GUI_EXPORT QDropEvent : public QEvent 648 { 649 public: 650 QDropEvent(const QPointF& pos, Qt::DropActions actions, const QMimeData *data, 651 Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Type type = Drop); 652 ~QDropEvent(); 653 pos()654 inline QPoint pos() const { return p.toPoint(); } posF()655 inline const QPointF &posF() const { return p; } mouseButtons()656 inline Qt::MouseButtons mouseButtons() const { return mouseState; } keyboardModifiers()657 inline Qt::KeyboardModifiers keyboardModifiers() const { return modState; } 658 possibleActions()659 inline Qt::DropActions possibleActions() const { return act; } proposedAction()660 inline Qt::DropAction proposedAction() const { return default_action; } acceptProposedAction()661 inline void acceptProposedAction() { drop_action = default_action; accept(); } 662 dropAction()663 inline Qt::DropAction dropAction() const { return drop_action; } 664 void setDropAction(Qt::DropAction action); 665 666 QObject* source() const; mimeData()667 inline const QMimeData *mimeData() const { return mdata; } 668 669 protected: 670 friend class QApplication; 671 QPointF p; 672 Qt::MouseButtons mouseState; 673 Qt::KeyboardModifiers modState; 674 Qt::DropActions act; 675 Qt::DropAction drop_action; 676 Qt::DropAction default_action; 677 const QMimeData *mdata; 678 }; 679 680 681 class Q_GUI_EXPORT QDragMoveEvent : public QDropEvent 682 { 683 public: 684 QDragMoveEvent(const QPoint &pos, Qt::DropActions actions, const QMimeData *data, 685 Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Type type = DragMove); 686 ~QDragMoveEvent(); 687 answerRect()688 inline QRect answerRect() const { return rect; } 689 accept()690 inline void accept() { QDropEvent::accept(); } ignore()691 inline void ignore() { QDropEvent::ignore(); } 692 accept(const QRect & r)693 inline void accept(const QRect & r) { accept(); rect = r; } ignore(const QRect & r)694 inline void ignore(const QRect & r) { ignore(); rect = r; } 695 696 protected: 697 QRect rect; 698 }; 699 700 701 class Q_GUI_EXPORT QDragEnterEvent : public QDragMoveEvent 702 { 703 public: 704 QDragEnterEvent(const QPoint &pos, Qt::DropActions actions, const QMimeData *data, 705 Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers); 706 ~QDragEnterEvent(); 707 }; 708 709 710 class Q_GUI_EXPORT QDragLeaveEvent : public QEvent 711 { 712 public: 713 QDragLeaveEvent(); 714 ~QDragLeaveEvent(); 715 }; 716 #endif // QT_CONFIG(draganddrop) 717 718 719 class Q_GUI_EXPORT QHelpEvent : public QEvent 720 { 721 public: 722 QHelpEvent(Type type, const QPoint &pos, const QPoint &globalPos); 723 ~QHelpEvent(); 724 x()725 inline int x() const { return p.x(); } y()726 inline int y() const { return p.y(); } globalX()727 inline int globalX() const { return gp.x(); } globalY()728 inline int globalY() const { return gp.y(); } 729 pos()730 inline const QPoint& pos() const { return p; } globalPos()731 inline const QPoint& globalPos() const { return gp; } 732 733 private: 734 QPoint p; 735 QPoint gp; 736 }; 737 738 #ifndef QT_NO_STATUSTIP 739 class Q_GUI_EXPORT QStatusTipEvent : public QEvent 740 { 741 public: 742 explicit QStatusTipEvent(const QString &tip); 743 ~QStatusTipEvent(); 744 tip()745 inline QString tip() const { return s; } 746 private: 747 QString s; 748 }; 749 #endif 750 751 #if QT_CONFIG(whatsthis) 752 class Q_GUI_EXPORT QWhatsThisClickedEvent : public QEvent 753 { 754 public: 755 explicit QWhatsThisClickedEvent(const QString &href); 756 ~QWhatsThisClickedEvent(); 757 href()758 inline QString href() const { return s; } 759 private: 760 QString s; 761 }; 762 #endif 763 764 #ifndef QT_NO_ACTION 765 class Q_GUI_EXPORT QActionEvent : public QEvent 766 { 767 QAction *act, *bef; 768 public: 769 QActionEvent(int type, QAction *action, QAction *before = nullptr); 770 ~QActionEvent(); 771 action()772 inline QAction *action() const { return act; } before()773 inline QAction *before() const { return bef; } 774 }; 775 #endif 776 777 class Q_GUI_EXPORT QFileOpenEvent : public QEvent 778 { 779 public: 780 explicit QFileOpenEvent(const QString &file); 781 explicit QFileOpenEvent(const QUrl &url); 782 ~QFileOpenEvent(); 783 file()784 inline QString file() const { return f; } url()785 QUrl url() const { return m_url; } 786 bool openFile(QFile &file, QIODevice::OpenMode flags) const; 787 private: 788 QString f; 789 QUrl m_url; 790 }; 791 792 #ifndef QT_NO_TOOLBAR 793 class Q_GUI_EXPORT QToolBarChangeEvent : public QEvent 794 { 795 public: 796 explicit QToolBarChangeEvent(bool t); 797 ~QToolBarChangeEvent(); 798 toggle()799 inline bool toggle() const { return tog; } 800 private: 801 uint tog : 1; 802 }; 803 #endif 804 805 #ifndef QT_NO_SHORTCUT 806 class Q_GUI_EXPORT QShortcutEvent : public QEvent 807 { 808 public: 809 QShortcutEvent(const QKeySequence &key, int id, bool ambiguous = false); 810 ~QShortcutEvent(); 811 key()812 inline const QKeySequence &key() const { return sequence; } shortcutId()813 inline int shortcutId() const { return sid; } isAmbiguous()814 inline bool isAmbiguous() const { return ambig; } 815 protected: 816 QKeySequence sequence; 817 bool ambig; 818 int sid; 819 }; 820 #endif 821 822 class Q_GUI_EXPORT QWindowStateChangeEvent: public QEvent 823 { 824 public: 825 explicit QWindowStateChangeEvent(Qt::WindowStates aOldState, bool isOverride = false); 826 ~QWindowStateChangeEvent(); 827 oldState()828 inline Qt::WindowStates oldState() const { return ostate; } 829 bool isOverride() const; 830 831 private: 832 Qt::WindowStates ostate; 833 bool m_override; 834 }; 835 836 #ifndef QT_NO_DEBUG_STREAM 837 Q_GUI_EXPORT QDebug operator<<(QDebug, const QEvent *); 838 #endif 839 840 #ifndef QT_NO_SHORTCUT 841 inline bool operator==(QKeyEvent *e, QKeySequence::StandardKey key){return (e ? e->matches(key) : false);} 842 inline bool operator==(QKeySequence::StandardKey key, QKeyEvent *e){return (e ? e->matches(key) : false);} 843 #endif // QT_NO_SHORTCUT 844 845 class Q_GUI_EXPORT QPointingDeviceUniqueId 846 { 847 Q_GADGET Q_PROPERTY(qint64 numericId READ numericId CONSTANT)848 Q_PROPERTY(qint64 numericId READ numericId CONSTANT) 849 public: 850 Q_ALWAYS_INLINE 851 Q_DECL_CONSTEXPR QPointingDeviceUniqueId() noexcept : m_numericId(-1) {} 852 // compiler-generated copy/move ctor/assignment operators are ok! 853 // compiler-generated dtor is ok! 854 855 static QPointingDeviceUniqueId fromNumericId(qint64 id); 856 isValid()857 Q_ALWAYS_INLINE Q_DECL_CONSTEXPR bool isValid() const noexcept { return m_numericId != -1; } 858 qint64 numericId() const noexcept; 859 860 private: 861 // TODO: for TUIO 2, or any other type of complex token ID, an internal 862 // array (or hash) can be added to hold additional properties. 863 // In this case, m_numericId will then turn into an index into that array (or hash). 864 qint64 m_numericId; 865 }; 866 Q_DECLARE_TYPEINFO(QPointingDeviceUniqueId, Q_MOVABLE_TYPE); 867 868 #if 0 869 #pragma qt_sync_suspend_processing 870 #endif 871 template <> class QList<QPointingDeviceUniqueId> {}; // to prevent instantiation: use QVector instead 872 #if 0 873 #pragma qt_sync_resume_processing 874 #endif 875 876 Q_GUI_EXPORT bool operator==(QPointingDeviceUniqueId lhs, QPointingDeviceUniqueId rhs) noexcept; 877 inline bool operator!=(QPointingDeviceUniqueId lhs, QPointingDeviceUniqueId rhs) noexcept 878 { return !operator==(lhs, rhs); } 879 Q_GUI_EXPORT uint qHash(QPointingDeviceUniqueId key, uint seed = 0) noexcept; 880 881 882 883 class QTouchEventTouchPointPrivate; 884 class Q_GUI_EXPORT QTouchEvent : public QInputEvent 885 { 886 public: 887 class Q_GUI_EXPORT TouchPoint 888 { 889 public: 890 enum InfoFlag { 891 Pen = 0x0001, 892 Token = 0x0002 893 }; 894 #ifndef Q_MOC_RUN 895 // otherwise moc gives 896 // Error: Meta object features not supported for nested classes 897 Q_DECLARE_FLAGS(InfoFlags, InfoFlag) 898 #endif 899 900 explicit TouchPoint(int id = -1); 901 TouchPoint(const TouchPoint &other); TouchPoint(TouchPoint && other)902 TouchPoint(TouchPoint &&other) noexcept 903 : d(nullptr) 904 { qSwap(d, other.d); } 905 TouchPoint &operator=(TouchPoint &&other) noexcept 906 { qSwap(d, other.d); return *this; } 907 ~TouchPoint(); 908 909 TouchPoint &operator=(const TouchPoint &other) 910 { if ( d != other.d ) { TouchPoint copy(other); swap(copy); } return *this; } 911 swap(TouchPoint & other)912 void swap(TouchPoint &other) noexcept 913 { qSwap(d, other.d); } 914 915 int id() const; 916 QPointingDeviceUniqueId uniqueId() const; 917 918 Qt::TouchPointState state() const; 919 920 QPointF pos() const; 921 QPointF startPos() const; 922 QPointF lastPos() const; 923 924 QPointF scenePos() const; 925 QPointF startScenePos() const; 926 QPointF lastScenePos() const; 927 928 QPointF screenPos() const; 929 QPointF startScreenPos() const; 930 QPointF lastScreenPos() const; 931 932 QPointF normalizedPos() const; 933 QPointF startNormalizedPos() const; 934 QPointF lastNormalizedPos() const; 935 936 #if QT_DEPRECATED_SINCE(5, 15) 937 // All these are actually deprecated since 5.9, in docs 938 QT_DEPRECATED_VERSION_X_5_15("Use pos() and ellipseDiameters()") 939 QRectF rect() const; 940 QT_DEPRECATED_VERSION_X_5_15("Use scenePos() and ellipseDiameters()") 941 QRectF sceneRect() const; 942 QT_DEPRECATED_VERSION_X_5_15("Use screenPos() and ellipseDiameters()") 943 QRectF screenRect() const; 944 945 // internal 946 QT_DEPRECATED_VERSION_X_5_15("Use setPos() and setEllipseDiameters()") 947 void setRect(const QRectF &rect); // deprecated 948 QT_DEPRECATED_VERSION_X_5_15("Use setScenePos() and setEllipseDiameters()") 949 void setSceneRect(const QRectF &sceneRect); // deprecated 950 QT_DEPRECATED_VERSION_X_5_15("Use setScreenPos() and setEllipseDiameters()") 951 void setScreenRect(const QRectF &screenRect); // deprecated 952 #endif 953 qreal pressure() const; 954 qreal rotation() const; 955 QSizeF ellipseDiameters() const; 956 957 QVector2D velocity() const; 958 InfoFlags flags() const; 959 QVector<QPointF> rawScreenPositions() const; 960 961 // internal 962 void setId(int id); 963 void setUniqueId(qint64 uid); 964 void setState(Qt::TouchPointStates state); 965 void setPos(const QPointF &pos); 966 void setScenePos(const QPointF &scenePos); 967 void setScreenPos(const QPointF &screenPos); 968 void setNormalizedPos(const QPointF &normalizedPos); 969 void setStartPos(const QPointF &startPos); 970 void setStartScenePos(const QPointF &startScenePos); 971 void setStartScreenPos(const QPointF &startScreenPos); 972 void setStartNormalizedPos(const QPointF &startNormalizedPos); 973 void setLastPos(const QPointF &lastPos); 974 void setLastScenePos(const QPointF &lastScenePos); 975 void setLastScreenPos(const QPointF &lastScreenPos); 976 void setLastNormalizedPos(const QPointF &lastNormalizedPos); 977 void setPressure(qreal pressure); 978 void setRotation(qreal angle); 979 void setEllipseDiameters(const QSizeF &dia); 980 void setVelocity(const QVector2D &v); 981 void setFlags(InfoFlags flags); 982 void setRawScreenPositions(const QVector<QPointF> &positions); 983 984 private: 985 QTouchEventTouchPointPrivate *d; 986 friend class QGuiApplication; 987 friend class QGuiApplicationPrivate; 988 friend class QApplication; 989 friend class QApplicationPrivate; 990 friend class QQuickPointerTouchEvent; 991 friend class QQuickMultiPointTouchArea; 992 }; 993 994 #if QT_DEPRECATED_SINCE(5, 0) 995 enum DeviceType { 996 TouchScreen, 997 TouchPad 998 }; 999 #endif 1000 1001 explicit QTouchEvent(QEvent::Type eventType, 1002 QTouchDevice *device = nullptr, 1003 Qt::KeyboardModifiers modifiers = Qt::NoModifier, 1004 Qt::TouchPointStates touchPointStates = Qt::TouchPointStates(), 1005 const QList<QTouchEvent::TouchPoint> &touchPoints = QList<QTouchEvent::TouchPoint>()); 1006 ~QTouchEvent(); 1007 window()1008 inline QWindow *window() const { return _window; } target()1009 inline QObject *target() const { return _target; } 1010 #if QT_DEPRECATED_SINCE(5, 0) deviceType()1011 QT_DEPRECATED inline QTouchEvent::DeviceType deviceType() const { return static_cast<DeviceType>(int(_device->type())); } 1012 #endif touchPointStates()1013 inline Qt::TouchPointStates touchPointStates() const { return _touchPointStates; } touchPoints()1014 inline const QList<QTouchEvent::TouchPoint> &touchPoints() const { return _touchPoints; } device()1015 inline QTouchDevice *device() const { return _device; } 1016 1017 // internal setWindow(QWindow * awindow)1018 inline void setWindow(QWindow *awindow) { _window = awindow; } setTarget(QObject * atarget)1019 inline void setTarget(QObject *atarget) { _target = atarget; } setTouchPointStates(Qt::TouchPointStates aTouchPointStates)1020 inline void setTouchPointStates(Qt::TouchPointStates aTouchPointStates) { _touchPointStates = aTouchPointStates; } setTouchPoints(const QList<QTouchEvent::TouchPoint> & atouchPoints)1021 inline void setTouchPoints(const QList<QTouchEvent::TouchPoint> &atouchPoints) { _touchPoints = atouchPoints; } setDevice(QTouchDevice * adevice)1022 inline void setDevice(QTouchDevice *adevice) { _device = adevice; } 1023 1024 protected: 1025 QWindow *_window; 1026 QObject *_target; 1027 QTouchDevice *_device; 1028 Qt::TouchPointStates _touchPointStates; 1029 QList<QTouchEvent::TouchPoint> _touchPoints; 1030 1031 friend class QGuiApplication; 1032 friend class QGuiApplicationPrivate; 1033 friend class QApplication; 1034 friend class QApplicationPrivate; 1035 #ifndef QT_NO_GRAPHICSVIEW 1036 friend class QGraphicsScenePrivate; // direct access to _touchPoints 1037 #endif 1038 }; 1039 Q_DECLARE_TYPEINFO(QTouchEvent::TouchPoint, Q_MOVABLE_TYPE); 1040 Q_DECLARE_OPERATORS_FOR_FLAGS(QTouchEvent::TouchPoint::InfoFlags) 1041 1042 #ifndef QT_NO_DEBUG_STREAM 1043 Q_GUI_EXPORT QDebug operator<<(QDebug, const QTouchEvent::TouchPoint &); 1044 #endif 1045 1046 class Q_GUI_EXPORT QScrollPrepareEvent : public QEvent 1047 { 1048 public: 1049 explicit QScrollPrepareEvent(const QPointF &startPos); 1050 ~QScrollPrepareEvent(); 1051 1052 QPointF startPos() const; 1053 1054 QSizeF viewportSize() const; 1055 QRectF contentPosRange() const; 1056 QPointF contentPos() const; 1057 1058 void setViewportSize(const QSizeF &size); 1059 void setContentPosRange(const QRectF &rect); 1060 void setContentPos(const QPointF &pos); 1061 1062 private: 1063 QObject* m_target; // Qt 6 remove. 1064 QPointF m_startPos; 1065 QSizeF m_viewportSize; 1066 QRectF m_contentPosRange; 1067 QPointF m_contentPos; 1068 }; 1069 1070 1071 class Q_GUI_EXPORT QScrollEvent : public QEvent 1072 { 1073 public: 1074 enum ScrollState 1075 { 1076 ScrollStarted, 1077 ScrollUpdated, 1078 ScrollFinished 1079 }; 1080 1081 QScrollEvent(const QPointF &contentPos, const QPointF &overshoot, ScrollState scrollState); 1082 ~QScrollEvent(); 1083 1084 QPointF contentPos() const; 1085 QPointF overshootDistance() const; 1086 ScrollState scrollState() const; 1087 1088 private: 1089 QPointF m_contentPos; 1090 QPointF m_overshoot; 1091 QScrollEvent::ScrollState m_state; 1092 }; 1093 1094 class Q_GUI_EXPORT QScreenOrientationChangeEvent : public QEvent 1095 { 1096 public: 1097 QScreenOrientationChangeEvent(QScreen *screen, Qt::ScreenOrientation orientation); 1098 ~QScreenOrientationChangeEvent(); 1099 1100 QScreen *screen() const; 1101 Qt::ScreenOrientation orientation() const; 1102 1103 private: 1104 QScreen *m_screen; 1105 Qt::ScreenOrientation m_orientation; 1106 }; 1107 1108 class Q_GUI_EXPORT QApplicationStateChangeEvent : public QEvent 1109 { 1110 public: 1111 explicit QApplicationStateChangeEvent(Qt::ApplicationState state); 1112 Qt::ApplicationState applicationState() const; 1113 1114 private: 1115 Qt::ApplicationState m_applicationState; 1116 }; 1117 1118 QT_END_NAMESPACE 1119 1120 #endif // QEVENT_H 1121