Класс QEventLoop
Класс QEventLoop предоставляет способ входа и выхода из цикла обработки событий. Подробнее...
| Заголовок: | #include <QEventLoop> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Наследует: | QObject |
Типы public
| Перечисление | ProcessEventsFlag { ВсеСобытия, ИсключениеСобытийПользовательскогоВвода, ИсключениеУведомленийСокетов, ОжиданиеДополнительныхСобытий } |
| флаги | ProcessEventsFlags |
Функции public
| QEventLoop(QObject *parent = nullptr) | |
| virtual | ~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() |
Переопределенные функции public
| virtual bool | event(QEvent *event) override |
Свойства public
| 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.
Эта функция особенно полезна, если у вас есть длительная операция, и вы хотите показать ее прогресс, не разрешая пользовательский ввод; т.е. используя флаг ИсключениеСобытийПользовательскогоВвода.
Эта функция просто оборачивает QAbstractEventDispatcher::processEvents(). См. документацию этой функции для получения подробной информации.
void QEventLoop::processEvents(QEventLoop::ProcessEventsFlags flags, int maxTime)
Обрабатывает ожидающие события, соответствующие flags, в течение максимального времени maxTime миллисекунд или до тех пор, пока не останется больше событий для обработки, в зависимости от того, что произойдет раньше. Эта функция особенно полезна, если у вас есть длительная операция, и вы хотите показать ее прогресс, не разрешая пользовательский ввод, т.е. используя флаг ИсключениеСобытийПользовательскогоВвода.
Примечания:
- Эта функция не обрабатывает события непрерывно; она возвращается после обработки всех доступных событий.
- Указание флага ОжиданиеДополнительныхСобытий не имеет смысла и будет проигнорировано.
void QEventLoop::wakeUp()
Разбуждает цикл обработки событий.
См. также QAbstractEventDispatcher::wakeUp().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qeventloop.html