Класс 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 |
- 32 открытых функции, унаследованные от QObject
Открытые слоты
| void | quit() |
- 1 открытый слот, унаследованный от QObject
Статические открытые члены
| const QMetaObject | staticMetaObject |
- 10 статических открытых членов, унаследованных от QObject
Дополнительные унаследованные члены
- 1 свойство, унаследованное от QObject
- 2 сигналов, унаследованных от QObject
- 9 защищённых функций, унаследованных от QObject
Подробное описание
Класс QEventLoop предоставляет возможность входа и выхода из цикла обработки событий.
В любой момент вы можете создать объект 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.
[virtual] QEventLoop::~QEventLoop()
Деструктор объекта цикла обработки событий.
[override virtual] bool QEventLoop::event(QEvent *event)
Переопределено из QObject::event().
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)
Обрабатывает ожидающие события, соответствующие флагам, в течение максимум maxTime миллисекунд или до тех пор, пока не останется больше событий для обработки, в зависимости от того, что произойдет раньше. Эта функция особенно полезна, если у вас есть длительная операция, и вы хотите показать ее прогресс без разрешения пользовательского ввода, например, с помощью флага ExcludeUserInputEvents.
Примечания:
- Эта функция не обрабатывает события непрерывно; она возвращается после обработки всех доступных событий.
- Указание флага WaitForMoreEvents не имеет смысла и будет проигнорировано.
[slot] void QEventLoop::quit()
Заставляет цикл событий выйти нормально.
То же, что и exit(0).
См. также QCoreApplication::quit() и exit().
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.12/qeventloop.html