diff options
Diffstat (limited to 'src/corelib/kernel/qabstracteventdispatcher.h')
-rw-r--r-- | src/corelib/kernel/qabstracteventdispatcher.h | 60 |
1 files changed, 58 insertions, 2 deletions
diff --git a/src/corelib/kernel/qabstracteventdispatcher.h b/src/corelib/kernel/qabstracteventdispatcher.h index 4026bde347..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; @@ -28,6 +29,12 @@ public: inline TimerInfo(int id, int i, Qt::TimerType t) : timerId(id), interval(i), timerType(t) { } }; + struct TimerInfoV2 + { + Duration interval; + Qt::TimerId timerId; + Qt::TimerType timerType; + }; explicit QAbstractEventDispatcher(QObject *parent = nullptr); ~QAbstractEventDispatcher(); @@ -39,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; @@ -67,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 |