Класс QAbstractEventDispatcher
Класс QAbstractEventDispatcher предоставляет интерфейс для управления очередью событий Qt. Подробнее...
| Заголовок: | #include <QAbstractEventDispatcher> |
| qmake: | QT += core |
| Наследуется от: | QObject |
Типы
| Структура | TimerInfo |
Открытые функции
| QAbstractEventDispatcher(QObject *parent = nullptr) | |
| виртуальный | ~QAbstractEventDispatcher() |
| bool | filterNativeEvent(const QByteArray &eventType, void *message, long *result) |
| void | installNativeEventFilter(QAbstractNativeEventFilter *filterObj) |
| виртуальный void | interrupt() = 0 |
| виртуальный bool | processEvents(QEventLoop::ProcessEventsFlags flags) = 0 |
| виртуальный bool | registerEventNotifier(QWinEventNotifier *notifier) = 0 |
| виртуальный void | registerSocketNotifier(QSocketNotifier *notifier) = 0 |
| int | registerTimer(int interval, Qt::TimerType timerType, QObject *object) |
| виртуальный void | registerTimer(int timerId, int interval, Qt::TimerType timerType, QObject *object) = 0 |
| виртуальный QList<QAbstractEventDispatcher::TimerInfo> | registeredTimers(QObject *object) const = 0 |
| виртуальный int | remainingTime(int timerId) = 0 |
| void | removeNativeEventFilter(QAbstractNativeEventFilter *filter) |
| виртуальный void | unregisterEventNotifier(QWinEventNotifier *notifier) = 0 |
| виртуальный void | unregisterSocketNotifier(QSocketNotifier *notifier) = 0 |
| виртуальный bool | unregisterTimer(int timerId) = 0 |
| виртуальный bool | unregisterTimers(QObject *object) = 0 |
| виртуальный void | wakeUp() = 0 |
Сигналы
| void | aboutToBlock() |
| void | awake() |
Статические открытые члены
| QAbstractEventDispatcher * | instance(QThread *thread = nullptr) |
Подробное описание
Обработчик событий получает события от системы окон и других источников. Затем он отправляет их экземпляру QCoreApplication или QApplication для обработки и доставки. QAbstractEventDispatcher обеспечивает тонкую настройку доставки событий.
Для простого управления обработкой событий используйте QCoreApplication::processEvents().
Для более тонкого управления циклом обработки событий вызовите instance() и вызовите функции на объекте QAbstractEventDispatcher, который возвращается. Если вы хотите использовать свой собственный экземпляр QAbstractEventDispatcher или подкласса QAbstractEventDispatcher, вы должны установить его с помощью QCoreApplication::setEventDispatcher() или QThread::setEventDispatcher() до установки обработчика событий по умолчанию.
Главный цикл обработки событий запускается путем вызова QCoreApplication::exec() и останавливается путем вызова QCoreApplication::exit(). Местные циклы обработки событий могут быть созданы с помощью QEventLoop.
Программы, выполняющие длительные операции, могут вызывать processEvents() с комбинацией различных значений QEventLoop::ProcessEventsFlag для управления тем, какие события должны быть доставлены.
QAbstractEventDispatcher также позволяет интегрировать внешний цикл обработки событий с циклом обработки событий Qt.
См. также QEventLoop, QCoreApplication и QThread.
Документация по функциям-членам
QAbstractEventDispatcher::QAbstractEventDispatcher(QObject *parent = nullptr)
Создаёт новый обработчик событий с заданным parent.
void QAbstractEventDispatcher::aboutToBlock()
Этот сигнал испускается перед тем, как цикл обработки событий вызовет функцию, которая может заблокировать.
См. также awake().
void QAbstractEventDispatcher::awake()
Этот сигнал испускается после того, как цикл обработки событий возвращается из функции, которая могла заблокировать.
См. также wakeUp() и aboutToBlock().
QAbstractEventDispatcher::~QAbstractEventDispatcher()
Уничтожает обработчик событий.
bool QAbstractEventDispatcher::filterNativeEvent(const QByteArray &eventType, void *message, long *result)
Отправляет message через фильтры событий, установленные с помощью installNativeEventFilter(). Эта функция возвращает значение true сразу после того, как какой-либо фильтр событий возвращает true, и false в противном случае, чтобы указать, что обработка события должна продолжаться.
Подклассы QAbstractEventDispatcher обязательно должны вызывать эту функцию для всех сообщений, полученных от системы, чтобы обеспечить совместимость со всеми расширениями, которые могут использоваться в приложении. Тип события eventType специфичен для плагина платформы, выбранного во время выполнения, и может быть использован для приведения типа message к нужному типу. Указатель result используется только в Windows и соответствует указателю LRESULT.
Обратите внимание, что тип message зависит от платформы. Подробности см. в QAbstractNativeEventFilter.
Эта функция была введена в Qt 5.0.
См. также installNativeEventFilter() и QAbstractNativeEventFilter::nativeEventFilter().
void QAbstractEventDispatcher::installNativeEventFilter(QAbstractNativeEventFilter *filterObj)
Устанавливает фильтр событий filterObj для всех событий, поступающих от ОС.
Фильтр событий filterObj получает события через функцию nativeEventFilter(), которая вызывается для всех событий, полученных всеми потоками.
Функция nativeEventFilter() должна возвращать true, если событие должно быть отфильтровано (в этом случае, остановлено). Она должна возвращать false, чтобы разрешить стандартную обработку Qt: нативное событие может быть затем преобразовано в QEvent и обработано стандартным Qt-фильтром событий, например, QObject::installEventFilter().
Если установлено несколько фильтров событий, фильтр, установленный последним, активируется первым.
Примечание: Функция фильтра получает нативные сообщения, то есть структуры MSG или XEvent.
Для максимальной переносимости всегда следует использовать объекты QEvent и QObject::installEventFilter(), когда это возможно.
Эта функция была добавлена в Qt 5.0.
См. также QObject::installEventFilter().
[static] QAbstractEventDispatcher *QAbstractEventDispatcher::instance(QThread *thread = nullptr)
Возвращает указатель на объект диспетчера событий для указанной нити thread. Если thread равен nullptr, используется текущая нить. Если диспетчер событий для указанной нити не существует, эта функция возвращает nullptr.
Примечание: Если Qt скомпилирован без поддержки потоков, аргумент thread игнорируется.
[pure virtual] void QAbstractEventDispatcher::interrupt()
Прерывает обработку событий. Диспетчер событий вернётся из processEvents() как можно скорее.
[pure virtual] bool QAbstractEventDispatcher::processEvents(QEventLoop::ProcessEventsFlags flags)
Обрабатывает ожидающие события, соответствующие flags, пока не закончатся все события для обработки. Возвращает true если событие было обработано; в противном случае возвращает false.
Эта функция особенно полезна, если у вас есть длительная операция и вы хотите показать ее прогресс без ожидания пользовательского ввода, используя флаг QEventLoop::ExcludeUserInputEvents.
Если флаг QEventLoop::WaitForMoreEvents установлен в flags, поведение этой функции следующее:
- Если события доступны, функция возвращается после их обработки.
- Если события недоступны, функция будет ожидать, пока они появятся, и вернётся после обработки новых доступных событий.
Если флаг QEventLoop::WaitForMoreEvents не установлен в flags, и события недоступны, функция вернётся немедленно.
Примечание: Эта функция не обрабатывает события непрерывно; она возвращается после обработки всех доступных событий.
См. также hasPendingEvents().
[pure virtual] bool QAbstractEventDispatcher::registerEventNotifier(QWinEventNotifier *notifier)
Этот чисто виртуальный метод существует только в Windows и должен быть переопределён реализацией диспетчера событий для Windows. notifier — экземпляр QWinEventNotifier, который необходимо зарегистрировать.
Метод должен возвращать true, если регистрация notifier прошла успешно, иначе false.
QWinEventNotifier вызывает этот метод в своём конструкторе, и нет необходимости вызывать этот метод напрямую.
См. также QWinEventNotifier и unregisterEventNotifier().
[pure virtual] void QAbstractEventDispatcher::registerSocketNotifier(QSocketNotifier *notifier)
Регистрирует notifier в цикле обработки событий. Подклассы должны реализовать этот метод, чтобы связать уведомление о сокете с другим циклом обработки событий.
int QAbstractEventDispatcher::registerTimer(int interval, Qt::TimerType timerType, QObject *object)
Регистрирует таймер с заданным интервалом interval и типом таймера timerType для данного объекта object и возвращает идентификатор таймера.
[pure virtual] void QAbstractEventDispatcher::registerTimer(int timerId, int interval, Qt::TimerType timerType, QObject *object)
Регистрирует таймер с заданным идентификатором timerId, интервалом interval и типом таймера timerType для данного объекта object.
[pure virtual] QList<QAbstractEventDispatcher::TimerInfo> QAbstractEventDispatcher::registeredTimers(QObject *object) const
Возвращает список зарегистрированных таймеров для объекта object. Структура TimerInfo имеет члены timerId, interval, и timerType.
См. также Qt::TimerType.
[pure virtual] int QAbstractEventDispatcher::remainingTime(int timerId)
Возвращает оставшееся время в миллисекундах для таймера с заданным идентификатором timerId. Если таймер неактивен, возвращаемое значение будет -1. Если таймер просрочен, возвращаемое значение будет 0.
См. также Qt::TimerType.
void QAbstractEventDispatcher::removeNativeEventFilter(QAbstractNativeEventFilter *filter)
Удаляет фильтр событий filter из этого объекта. Запрос игнорируется, если такой фильтр не был установлен.
Все фильтры событий для этого объекта автоматически удаляются при уничтожении этого объекта.
Безопасно удалить фильтр событий даже во время его активации (то есть, даже изнутри функции nativeEventFilter()).
Эта функция была добавлена в Qt 5.0.
См. также installNativeEventFilter() и QAbstractNativeEventFilter.
[pure virtual] void QAbstractEventDispatcher::unregisterEventNotifier(QWinEventNotifier *notifier)
Этот чисто виртуальный метод существует только в Windows и должен быть переопределён реализацией диспетчера событий для Windows. notifier — экземпляр QWinEventNotifier, который необходимо отменить.
QWinEventNotifier вызывает этот метод в своём деструкторе, и нет необходимости вызывать этот метод напрямую.
См. также QWinEventNotifier и registerEventNotifier().
[pure virtual] void QAbstractEventDispatcher::unregisterSocketNotifier(QSocketNotifier *notifier)
Отменяет регистрацию notifier в диспетчере событий. Подклассы должны переопределить этот метод, чтобы связать уведомление о сокете с другим циклом обработки событий. Реализации должны вызывать базовую реализацию.
[pure virtual] bool QAbstractEventDispatcher::unregisterTimer(int timerId)
Отменяет регистрацию таймера с заданным идентификатором timerId. Возвращает true при успехе; в противном случае возвращает false.
См. также registerTimer() и unregisterTimers().
[pure virtual] bool QAbstractEventDispatcher::unregisterTimers(QObject *object)
Отменяет регистрацию всех таймеров, связанных с данным объектом object. Возвращает true если все таймеры были успешно удалены; в противном случае возвращает false.
См. также unregisterTimer() и registeredTimers().
[pure virtual] void QAbstractEventDispatcher::wakeUp()
Разбуждает цикл обработки событий.
Примечание: Эта функция безопасна для многопоточного доступа.
См. также awake().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qabstracteventdispatcher.html