diff options
Diffstat (limited to 'src/corelib/kernel/qabstracteventdispatcher.h')
-rw-r--r-- | src/corelib/kernel/qabstracteventdispatcher.h | 63 |
1 files changed, 59 insertions, 4 deletions
diff --git a/src/corelib/kernel/qabstracteventdispatcher.h b/src/corelib/kernel/qabstracteventdispatcher.h index 8cd7ae2983..ad97a93ba2 100644 --- a/src/corelib/kernel/qabstracteventdispatcher.h +++ b/src/corelib/kernel/qabstracteventdispatcher.h @@ -19,6 +19,7 @@ class Q_CORE_EXPORT QAbstractEventDispatcher : public QObject Q_DECLARE_PRIVATE(QAbstractEventDispatcher) public: + using Duration = std::chrono::nanoseconds; struct TimerInfo { int timerId; @@ -26,8 +27,13 @@ public: Qt::TimerType timerType; inline TimerInfo(int id, int i, Qt::TimerType t) - : timerId(id), interval(i), timerType(t) - { } + : timerId(id), interval(i), timerType(t) { } + }; + struct TimerInfoV2 + { + Duration interval; + Qt::TimerId timerId; + Qt::TimerType timerType; }; explicit QAbstractEventDispatcher(QObject *parent = nullptr); @@ -40,14 +46,29 @@ public: virtual void registerSocketNotifier(QSocketNotifier *notifier) = 0; virtual void unregisterSocketNotifier(QSocketNotifier *notifier) = 0; + Qt::TimerId registerTimer(Duration interval, Qt::TimerType timerType, QObject *object); + +#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) int registerTimer(qint64 interval, Qt::TimerType timerType, QObject *object); + + // old, integer-based API virtual void registerTimer(int timerId, qint64 interval, Qt::TimerType timerType, QObject *object) = 0; virtual bool unregisterTimer(int timerId) = 0; - virtual bool unregisterTimers(QObject *object) = 0; virtual QList<TimerInfo> registeredTimers(QObject *object) const = 0; - virtual int remainingTime(int timerId) = 0; + void registerTimer(Qt::TimerId timerId, Duration interval, Qt::TimerType timerType, QObject *object); + bool unregisterTimer(Qt::TimerId timerId); + QList<TimerInfoV2> timersForObject(QObject *object) const; + Duration remainingTime(Qt::TimerId timerId) const; +#else + virtual void registerTimer(Qt::TimerId timerId, Duration interval, Qt::TimerType timerType, QObject *object) = 0; + virtual bool unregisterTimer(Qt::TimerId timerId) = 0; + virtual QList<TimerInfoV2> timersForObject(QObject *object) const = 0; + virtual Duration remainingTime(Qt::TimerId timerId) const = 0; +#endif + virtual bool unregisterTimers(QObject *object) = 0; + virtual void wakeUp() = 0; virtual void interrupt() = 0; @@ -68,6 +89,40 @@ protected: }; Q_DECLARE_TYPEINFO(QAbstractEventDispatcher::TimerInfo, Q_PRIMITIVE_TYPE); +Q_DECLARE_TYPEINFO(QAbstractEventDispatcher::TimerInfoV2, Q_PRIMITIVE_TYPE); + +#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) +class Q_CORE_EXPORT QAbstractEventDispatcherV2 : public QAbstractEventDispatcher +{ + Q_OBJECT + Q_DECLARE_PRIVATE(QAbstractEventDispatcher) // not V2 + +public: + explicit QAbstractEventDispatcherV2(QObject *parent = nullptr); + ~QAbstractEventDispatcherV2(); + + // new virtuals + virtual void registerTimer(Qt::TimerId timerId, Duration interval, Qt::TimerType timerType, + QObject *object) = 0; + virtual bool unregisterTimer(Qt::TimerId timerId) = 0; + virtual QList<TimerInfoV2> timersForObject(QObject *object) const = 0; + virtual Duration remainingTime(Qt::TimerId timerId) const = 0; + +protected: + QAbstractEventDispatcherV2(QAbstractEventDispatcherPrivate &, QObject *parent); + +private: + // final overrides from V1 + virtual void registerTimer(int timerId, qint64 interval, Qt::TimerType timerType, + QObject *object) override final; + virtual bool unregisterTimer(int timerId) override final; + virtual QList<TimerInfo> registeredTimers(QObject *object) const override final; + + virtual int remainingTime(int timerId) override final; +}; +#else +using QAbstractEventDispatcherV2 = QAbstractEventDispatcher; +#endif // Qt 7 QT_END_NAMESPACE |