Класс 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() |
Static Public Members
| QAbstractEventDispatcher * | instance(QThread *thread = nullptr) |
Detailed Description
Диспетчер событий получает события от системного окна и других источников. Затем он отправляет их экземпляру 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.
[signal] void QAbstractEventDispatcher::aboutToBlock()
Этот сигнал испускается перед тем, как цикл событий вызовет функцию, которая может заблокироваться.
См. также awake().
[signal] void QAbstractEventDispatcher::awake()
Этот сигнал испускается после того, как цикл событий возвращается из функции, которая могла заблокироваться.
См. также wakeUp() и aboutToBlock().
[virtual] QAbstractEventDispatcher::~QAbstractEventDispatcher()
Уничтожает диспетчер событий.
bool QAbstractEventDispatcher::filterNativeEvent(const QByteArray &eventType, void *message, long *result)
Отправляет message через фильтры событий, установленные с помощью installNativeEventFilter(). Эта функция возвращает true как только какой-либо фильтр событий возвращает true, и false в противном случае, чтобы указать, что обработка события должна продолжаться.
Подклассы QAbstractEventDispatcher должны вызывать эту функцию для всех сообщений, полученных от системы, чтобы обеспечить совместимость с любыми расширениями, которые могут быть использованы в приложении. Тип события eventType специфичен для плагина платформы, выбранного во время выполнения, и может использоваться для приведения сообщения к нужному типу. Указатель 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.
Если в flags установлен флаг QEventLoop::WaitForMoreEvents, поведение этой функции следующее:
- Если события доступны, эта функция возвращается после их обработки.
- Если события недоступны, функция будет ждать, пока они появятся, и вернется после обработки вновь доступных событий.
Если флаг 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.13/qabstracteventdispatcher.html