Класс QAbstractEventDispatcher
Класс QAbstractEventDispatcher предоставляет интерфейс для управления очередью событий Qt. Подробнее...
| Заголовок: | #include <QAbstractEventDispatcher> |
| qmake: | QT += core |
| Наследует: | QObject |
Открытые типы
| TimerInfo |
Открытые функции
| QAbstractEventDispatcher(QObject *parent = nullptr) | |
| virtual | ~QAbstractEventDispatcher() |
| bool | filterNativeEvent(const QByteArray &eventType, void *message, long *result) |
| void | installNativeEventFilter(QAbstractNativeEventFilter *filterObj) |
| virtual void | interrupt() = 0 |
| virtual bool | processEvents(QEventLoop::ProcessEventsFlags flags) = 0 |
| virtual bool | registerEventNotifier(QWinEventNotifier *notifier) = 0 |
| virtual void | registerSocketNotifier(QSocketNotifier *notifier) = 0 |
| int | registerTimer(int interval, Qt::TimerType timerType, QObject *object) |
| virtual void | registerTimer(int timerId, int interval, Qt::TimerType timerType, QObject *object) = 0 |
| virtual QList<QAbstractEventDispatcher::TimerInfo> | registeredTimers(QObject *object) const = 0 |
| virtual int | remainingTime(int timerId) = 0 |
| void | removeNativeEventFilter(QAbstractNativeEventFilter *filter) |
| virtual void | unregisterEventNotifier(QWinEventNotifier *notifier) = 0 |
| virtual void | unregisterSocketNotifier(QSocketNotifier *notifier) = 0 |
| virtual bool | unregisterTimer(int timerId) = 0 |
| virtual bool | unregisterTimers(QObject *object) = 0 |
| virtual 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.
Примечание: Если 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.14/qabstracteventdispatcher.html