Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qabstracteventdispatcher.h
Go to the documentation of this file.
1// Copyright (C) 2020 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// Qt-Security score:significant reason:default
4
5#ifndef QABSTRACTEVENTDISPATCHER_H
6#define QABSTRACTEVENTDISPATCHER_H
7
8#include <QtCore/qobject.h>
9#include <QtCore/qeventloop.h>
10
11QT_BEGIN_NAMESPACE
12
13class QAbstractNativeEventFilter;
14class QAbstractEventDispatcherPrivate;
15class QSocketNotifier;
16
17class Q_CORE_EXPORT QAbstractEventDispatcher : public QObject
18{
19 Q_OBJECT
20 Q_DECLARE_PRIVATE(QAbstractEventDispatcher)
21
22public:
23 using Duration = std::chrono::nanoseconds;
24 struct TimerInfo
25 {
26 int timerId;
27 int interval;
28 Qt::TimerType timerType;
29
30 inline TimerInfo(int id, int i, Qt::TimerType t)
31 : timerId(id), interval(i), timerType(t) { }
32 };
33 struct TimerInfoV2
34 {
35 Duration interval;
36 Qt::TimerId timerId;
37 Qt::TimerType timerType;
38 };
39
40 explicit QAbstractEventDispatcher(QObject *parent = nullptr);
41 ~QAbstractEventDispatcher();
42
43 static QAbstractEventDispatcher *instance(QThread *thread = nullptr);
44
45 virtual bool processEvents(QEventLoop::ProcessEventsFlags flags) = 0;
46
47 virtual void registerSocketNotifier(QSocketNotifier *notifier) = 0;
48 virtual void unregisterSocketNotifier(QSocketNotifier *notifier) = 0;
49
50 Qt::TimerId registerTimer(Duration interval, Qt::TimerType timerType, QObject *object);
51
52#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
53 int registerTimer(qint64 interval, Qt::TimerType timerType, QObject *object);
54
55 // old, integer-based API
56 virtual void registerTimer(int timerId, qint64 interval, Qt::TimerType timerType, QObject *object) = 0;
57 virtual bool unregisterTimer(int timerId) = 0;
58 virtual bool unregisterTimers(QObject *object) = 0;
59 virtual QList<TimerInfo> registeredTimers(QObject *object) const = 0;
60 virtual int remainingTime(int timerId) = 0;
61
62 void registerTimer(Qt::TimerId timerId, Duration interval, Qt::TimerType timerType, QObject *object);
63 bool unregisterTimer(Qt::TimerId timerId);
64 QList<TimerInfoV2> timersForObject(QObject *object) const;
65 Duration remainingTime(Qt::TimerId timerId) const;
66#else
67 virtual void registerTimer(Qt::TimerId timerId, Duration interval, Qt::TimerType timerType, QObject *object) = 0;
68 virtual bool unregisterTimer(Qt::TimerId timerId) = 0;
69 virtual bool unregisterTimers(QObject *object) = 0;
70 virtual QList<TimerInfoV2> timersForObject(QObject *object) const = 0;
71 virtual Duration remainingTime(Qt::TimerId timerId) const = 0;
72#endif
73
74 virtual void wakeUp() = 0;
75 virtual void interrupt() = 0;
76
77 virtual void startingUp();
78 virtual void closingDown();
79
80 void installNativeEventFilter(QAbstractNativeEventFilter *filterObj);
81 void removeNativeEventFilter(QAbstractNativeEventFilter *filterObj);
82 bool filterNativeEvent(const QByteArray &eventType, void *message, qintptr *result);
83
84Q_SIGNALS:
85 void aboutToBlock();
86 void awake();
87
88protected:
89 QAbstractEventDispatcher(QAbstractEventDispatcherPrivate &,
90 QObject *parent);
91};
92
93Q_DECLARE_TYPEINFO(QAbstractEventDispatcher::TimerInfo, Q_PRIMITIVE_TYPE);
94Q_DECLARE_TYPEINFO(QAbstractEventDispatcher::TimerInfoV2, Q_PRIMITIVE_TYPE);
95
96#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
97class Q_CORE_EXPORT QAbstractEventDispatcherV2 : public QAbstractEventDispatcher
98{
99 Q_OBJECT
100 Q_DECLARE_PRIVATE(QAbstractEventDispatcher) // not V2
101
102public:
103 explicit QAbstractEventDispatcherV2(QObject *parent = nullptr);
104 ~QAbstractEventDispatcherV2() override;
105
106 // new virtuals
107 virtual void registerTimer(Qt::TimerId timerId, Duration interval, Qt::TimerType timerType,
108 QObject *object) = 0;
109 virtual bool unregisterTimer(Qt::TimerId timerId) = 0;
110 virtual QList<TimerInfoV2> timersForObject(QObject *object) const = 0;
111 virtual Duration remainingTime(Qt::TimerId timerId) const = 0;
112 virtual bool processEventsWithDeadline(QEventLoop::ProcessEventsFlags flags, QDeadlineTimer deadline); // reserved for 6.9
113
114protected:
115 QAbstractEventDispatcherV2(QAbstractEventDispatcherPrivate &, QObject *parent);
116
117private:
118QT_WARNING_PUSH
119QT_WARNING_DISABLE_GCC("-Woverloaded-virtual")
120QT_WARNING_DISABLE_CLANG("-Woverloaded-virtual")
121 // final overrides from V1
122 void registerTimer(int timerId, qint64 interval, Qt::TimerType timerType,
123 QObject *object) final;
124 bool unregisterTimer(int timerId) final;
125 QList<TimerInfo> registeredTimers(QObject *object) const final;
126 int remainingTime(int timerId) final;
127QT_WARNING_POP
128};
129#else
130using QAbstractEventDispatcherV2 = QAbstractEventDispatcher;
131#endif // Qt 7
132
133QT_END_NAMESPACE
134
135#endif // QABSTRACTEVENTDISPATCHER_H
Combined button and popup list for selecting options.
QFreeList< void, QtTimerIdFreeListConstants > QtTimerIdFreeList
static const int Sizes[BlockCount]