Класс QAbstractEventDispatcher
Класс QAbstractEventDispatcher предоставляет интерфейс для управления очередью событий Qt. Подробнее...
| Заголовок: | #include <QAbstractEventDispatcher> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Наследует: | QObject |
Типы
| Структура | TimerInfo |
Открытые функции
| QAbstractEventDispatcher(QObject *parent = nullptr) | |
| виртуальный | ~QAbstractEventDispatcher() |
| bool | filterNativeEvent(const QByteArray &eventType, void *message, qintptr *result) |
| void | installNativeEventFilter(QAbstractNativeEventFilter *filterObj) |
| виртуальный void | interrupt() = 0 |
| виртуальный bool | processEvents(QEventLoop::ProcessEventsFlags flags) = 0 |
| виртуальный void | registerSocketNotifier(QSocketNotifier *notifier) = 0 |
| int | registerTimer(qint64 interval, Qt::TimerType timerType, QObject *object) |
| виртуальный void | registerTimer(int timerId, qint64 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 | 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.
[signal] void QAbstractEventDispatcher::aboutToBlock()
Этот сигнал излучается перед тем, как цикл событий вызовет функцию, которая может заблокировать.
См. также awake().
[signal] void QAbstractEventDispatcher::awake()
Этот сигнал излучается после того, как цикл событий возвращается из функции, которая могла заблокировать.
См. также wakeUp() и aboutToBlock().
[virtual] QAbstractEventDispatcher::~QAbstractEventDispatcher()
Уничтожает диспечер событий.
[since 5.0] bool QAbstractEventDispatcher::filterNativeEvent(const QByteArray &eventType, void *message, qintptr *result)
Отправляет message через фильтры событий, которые были установлены с помощью installNativeEventFilter(). Эта функция возвращает true как только фильтр событий возвращает true, и false в противном случае, чтобы указать, что обработка события должна продолжиться.
Подклассы QAbstractEventDispatcher должны вызывать эту функцию для всех сообщений, полученных от системы, чтобы обеспечить совместимость с любыми расширениями, которые могут использоваться в приложении. Тип события eventType специфичен для плагина платформы, выбранного во время выполнения, и может использоваться для приведения сообщения к нужному типу. Указатель result используется только в Windows и соответствует указателю LRESULT.
Обратите внимание, что тип message зависит от платформы. Подробности см. в QAbstractNativeEventFilter.
Эта функция была представлена в Qt 5.0.
См. также installNativeEventFilter() и QAbstractNativeEventFilter::nativeEventFilter().
[since 5.0] 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 и события недоступны, функция вернётся немедленно.
Примечание: Эта функция не обрабатывает события непрерывно; она возвращается после обработки всех доступных событий.
[pure virtual] void QAbstractEventDispatcher::registerSocketNotifier(QSocketNotifier *notifier)
Регистрирует notifier в цикле событий. Подклассы должны реализовать этот метод, чтобы привязать уведомление о сокете к другому циклу событий.
int QAbstractEventDispatcher::registerTimer(qint64 interval, Qt::TimerType timerType, QObject *object)
Регистрирует таймер с заданным interval и timerType для данного object и возвращает идентификатор таймера.
[pure virtual] void QAbstractEventDispatcher::registerTimer(int timerId, qint64 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.
[since 5.0] void QAbstractEventDispatcher::removeNativeEventFilter(QAbstractNativeEventFilter *filter)
Удаляет фильтр событий filter из этого объекта. Запрос игнорируется, если такой фильтр событий не был установлен.
Все фильтры событий для этого объекта автоматически удаляются при уничтожении этого объекта.
Безопасно удалять фильтр событий даже во время активации фильтра событий (то есть даже из функции nativeEventFilter()).
Данная функция была добавлена в Qt 5.0.
См. также installNativeEventFilter() и QAbstractNativeEventFilter.
[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-6.2/qabstracteventdispatcher.html