Класс 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 |
- 32 открытых функций, унаследованных от QObject
Сигналы
| void | aboutToBlock() |
| void | awake() |
- 2 сигнала, унаследованных от QObject
Статические открытые члены
| QAbstractEventDispatcher * | instance(QThread *thread = nullptr) |
| const QMetaObject | staticMetaObject |
- 10 статических открытых членов, унаследованных от QObject
Дополнительные унаследованные члены
- 1 свойство, унаследованное от QObject
- 1 открытый слот, унаследованный от QObject
- 9 защищённых функций, унаследованных от QObject
Подробное описание
Класс QAbstractEventDispatcher предоставляет интерфейс для управления очередью событий Qt.
Диспечер событий получает события от системного окна и других источников. Затем он отправляет их экземпляру 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.
[virtual] QAbstractEventDispatcher::~QAbstractEventDispatcher()
Удаляет диспечер событий.
[signal] void QAbstractEventDispatcher::aboutToBlock()
Этот сигнал излучается перед тем, как цикл событий вызовет функцию, которая может заблокировать.
См. также awake().
[signal] void QAbstractEventDispatcher::awake()
Этот сигнал излучается после того, как цикл событий возвращается из функции, которая могла заблокировать.
См. также wakeUp() и aboutToBlock().
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.
Если флаг 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.12/qabstracteventdispatcher.html