Класс 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 = ВсеСобытия) |
| 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 миллисекунд или до тех пор, пока не останется больше событий для обработки, что произойдёт раньше.
Примечания:
- Эта функция не обрабатывает события непрерывно; она возвращается после обработки всех доступных событий.
- Указание флага 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-6.0/qeventloop.html