Класс QEventLoop
Класс QEventLoop предоставляет способ входа и выхода из цикла обработки событий. Подробнее...
| Заголовок: | #include <QEventLoop> |
| qmake: | QT += core |
| Наследует: | QObject |
Общедоступные типы
| Перечисление | ProcessEventsFlag { ВсеСобытия, ИсключениеСобытийВводаПользователя, ИсключениеУведомленийСокетов, ОжиданиеДополнительныхСобытий } |
| флаги | ProcessEventsFlags |
Общедоступные функции
| QEventLoop(QObject *parent = nullptr) | |
| виртуальный | ~QEventLoop() |
| int | exec(QEventLoop::ProcessEventsFlags flags = ВсеСобытия) |
| void | exit(int returnCode = 0) |
| bool | isRunning() const |
| bool | processEvents(QEventLoop::ProcessEventsFlags flags = ВсеСобытия) |
| void | processEvents(QEventLoop::ProcessEventsFlags flags, int maxTime) |
| void | wakeUp() |
Переопределенные общедоступные функции
| виртуальный bool | event(QEvent *event) override |
Общедоступные слоты
| void | quit() |
Подробное описание
В любой момент вы можете создать объект QEventLoop и вызвать exec() на нем, чтобы запустить локальный цикл обработки событий. Изнутри цикла обработки событий вызов exit() заставит exec() вернуть значение.
См. также QAbstractEventDispatcher.
Документация по типам членов
перечисление QEventLoop::ProcessEventsFlagфлаги QEventLoop::ProcessEventsFlags
Это перечисление контролирует типы событий, обрабатываемых функциями processEvents().
| Константа | Значение | Описание |
|---|---|---|
QEventLoop::AllEvents |
0x00 |
Все события. Обратите внимание, что события DeferredDelete обрабатываются специально. См. QObject::deleteLater() для получения дополнительной информации. |
QEventLoop::ExcludeUserInputEvents |
0x01 |
Не обрабатывать события ввода пользователя, такие как ButtonPress и KeyPress. Обратите внимание, что события не отбрасываются; они будут доставлены в следующий раз, когда processEvents() вызывается без флага ExcludeUserInputEvents. |
QEventLoop::ExcludeSocketNotifiers |
0x02 |
Не обрабатывать события уведомлений сокетов. Обратите внимание, что события не отбрасываются; они будут доставлены в следующий раз, когда processEvents() вызывается без флага ExcludeSocketNotifiers. |
QEventLoop::WaitForMoreEvents |
0x04 |
Ожидать события, если нет ожидающих событий. |
Тип ProcessEventsFlags является псевдонимом для QFlags<ProcessEventsFlag>. Он хранит логическое ИЛИ сочетание значений ProcessEventsFlag.
См. также processEvents().
Документация по функциям-членам
QEventLoop::QEventLoop(QObject *parent = nullptr)
Конструирует объект цикла обработки событий с заданным parent.
[slot] void QEventLoop::quit()
Указывает циклу обработки событий на выход в обычном режиме.
То же самое, что и exit(0).
См. также QCoreApplication::quit() и exit().
[virtual] QEventLoop::~QEventLoop()
Уничтожает объект цикла обработки событий.
[override virtual] bool QEventLoop::event(QEvent *event)
Переопределяет: QObject::event(QEvent *e).
int QEventLoop::exec(QEventLoop::ProcessEventsFlags flags = ВсеСобытия)
Входит в основной цикл обработки событий и ожидает, пока не будет вызвано exit(). Возвращает значение, которое было передано в exit().
Если указаны flags, будут обрабатываться только события тех типов, которые разрешены flags.
Для запуска обработки событий необходимо вызвать эту функцию. Основной цикл обработки событий получает события от системного окна и рассылает их виджетам приложения.
В целом, никакого пользовательского взаимодействия не может произойти до вызова exec(). Как частный случай, модальные виджеты, такие как QMessageBox, могут использоваться до вызова exec(), потому что модальные виджеты используют свой собственный локальный цикл обработки событий.
Чтобы выполнить обработку вхолостую (т. е. выполнить специальную функцию всякий раз, когда нет ожидающих событий), используйте QTimer с таймаутом 0. Более сложные схемы обработки вхолостую можно реализовать с помощью processEvents().
См. также QCoreApplication::quit(), exit() и processEvents().
void QEventLoop::exit(int returnCode = 0)
Указывает циклу обработки событий на выход с кодом возврата.
После вызова этой функции цикл обработки событий возвращается из вызова exec(). Функция exec() возвращает returnCode.
По соглашению, returnCode 0 означает успех, а любое ненулевое значение указывает на ошибку.
Обратите внимание, что в отличие от одноименной функции библиотеки C, эта функция действительно возвращается вызывающему объекту — это обработка событий прекращается.
См. также QCoreApplication::quit(), quit() и exec().
bool QEventLoop::isRunning() const
Возвращает true если цикл обработки событий работает; в противном случае возвращает false. Цикл обработки событий считается работающим с момента вызова exec() до вызова exit().
bool QEventLoop::processEvents(QEventLoop::ProcessEventsFlags flags = ВсеСобытия)
Обрабатывает ожидающие события, соответствующие flags, пока нет больше событий для обработки. Возвращает true если ожидающие события были обработаны; в противном случае возвращает false.
Эта функция особенно полезна, если у вас есть длительная операция, и вы хотите показать ее ход без блокировки ввода пользователя, например, используя флаг ExcludeUserInputEvents.
Эта функция просто является оберткой для QAbstractEventDispatcher::processEvents(). См. документацию этой функции для получения подробной информации.
void QEventLoop::processEvents(QEventLoop::ProcessEventsFlags flags, int maxTime)
Обрабатывает ожидающие события, соответствующие flags, в течение максимального времени maxTime миллисекунд или до тех пор, пока не будут обработаны все события, в зависимости от того, что произойдет раньше. Эта функция особенно полезна, если у вас есть длительная операция, и вы хотите показать ее ход без блокировки ввода пользователя, например, используя флаг ExcludeUserInputEvents.
Примечания:
- Эта функция не обрабатывает события непрерывно; она возвращается после обработки всех доступных событий.
- Указание флага WaitForMoreEvents не имеет смысла и будет проигнорировано.
void QEventLoop::wakeUp()
Разбуждает цикл обработки событий.
См. также QAbstractEventDispatcher::wakeUp().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qeventloop.html