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