QEventLoop Class
Die Klasse QEventLoop bietet die Möglichkeit, eine Ereignisschleife zu betreten und zu verlassen. Mehr...
Kopfzeile: | #include <QEventLoop> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
Vererbt: | QObject |
Öffentliche Typen
enum | ProcessEventsFlag { AllEvents, ExcludeUserInputEvents, ExcludeSocketNotifiers, WaitForMoreEvents } |
flags | ProcessEventsFlags |
Öffentliche Funktionen
QEventLoop(QObject *parent = nullptr) | |
virtual | ~QEventLoop() |
int | exec(QEventLoop::ProcessEventsFlags flags = AllEvents) |
bool | isRunning() const |
bool | processEvents(QEventLoop::ProcessEventsFlags flags = AllEvents) |
(since 6.7) void | processEvents(QEventLoop::ProcessEventsFlags flags, QDeadlineTimer deadline) |
void | processEvents(QEventLoop::ProcessEventsFlags flags, int maxTime) |
void | wakeUp() |
Reimplementierte öffentliche Funktionen
virtual bool | event(QEvent *event) override |
Öffentliche Slots
Detaillierte Beschreibung
Sie können jederzeit ein QEventLoop-Objekt erstellen und exec() aufrufen, um eine lokale Ereignisschleife zu starten. Innerhalb der Ereignisschleife erzwingt der Aufruf von exit() die Rückkehr von exec().
Siehe auch QAbstractEventDispatcher.
Dokumentation der Mitgliedstypen
enum QEventLoop::ProcessEventsFlag
flags QEventLoop::ProcessEventsFlags
Diese Aufzählung steuert die Arten von Ereignissen, die von den Funktionen processEvents() verarbeitet werden.
Konstante | Wert | Beschreibung |
---|---|---|
QEventLoop::AllEvents | 0x00 | Alle Ereignisse. Beachten Sie, dass DeferredDelete Ereignisse speziell verarbeitet werden. Siehe QObject::deleteLater() für weitere Einzelheiten. |
QEventLoop::ExcludeUserInputEvents | 0x01 | Verarbeiten Sie keine Benutzereingabe-Ereignisse, wie ButtonPress und KeyPress. Beachten Sie, dass die Ereignisse nicht verworfen werden; sie werden beim nächsten Aufruf von processEvents() ohne das Flag ExcludeUserInputEvents geliefert. |
QEventLoop::ExcludeSocketNotifiers | 0x02 | Socket Notifier-Ereignisse werden nicht verarbeitet. Beachten Sie, dass die Ereignisse nicht verworfen werden; sie werden beim nächsten Aufruf von processEvents() ohne das Flag ExcludeSocketNotifiers zugestellt. |
QEventLoop::WaitForMoreEvents | 0x04 | Warten Sie auf Ereignisse, wenn keine ausstehenden Ereignisse verfügbar sind. |
Der Typ ProcessEventsFlags ist ein Typedef für QFlags<ProcessEventsFlag>. Er speichert eine ODER-Kombination von ProcessEventsFlag-Werten.
Siehe auch processEvents().
Dokumentation der Mitgliedsfunktionen
[explicit]
QEventLoop::QEventLoop(QObject *parent = nullptr)
Konstruiert ein Ereignisschleifenobjekt mit der angegebenen parent.
[virtual noexcept]
QEventLoop::~QEventLoop()
Zerstört das Objekt der Ereignisschleife.
[override virtual]
bool QEventLoop::event(QEvent *event)
Reimplements: QObject::event(QEvent *e).
int QEventLoop::exec(QEventLoop::ProcessEventsFlags flags = AllEvents)
Tritt in die Hauptereignisschleife ein und wartet, bis exit() aufgerufen wird. Gibt den Wert zurück, der an exit() übergeben wurde.
Wenn flags angegeben ist, werden nur Ereignisse der von flags zugelassenen Typen verarbeitet.
Es ist notwendig, diese Funktion aufzurufen, um die Ereignisbehandlung zu starten. Die Hauptereignisschleife empfängt Ereignisse vom Fenstersystem und gibt diese an die Anwendungs-Widgets weiter.
Im Allgemeinen kann vor dem Aufruf von exec() keine Benutzerinteraktion stattfinden. Als Sonderfall können modale Widgets wie QMessageBox vor dem Aufruf von exec() verwendet werden, da modale Widgets ihre eigene lokale Ereignisschleife verwenden.
Um Ihre Anwendung eine Leerlaufverarbeitung durchführen zu lassen (d.h. eine spezielle Funktion auszuführen, wenn keine Ereignisse anstehen), verwenden Sie QChronoTimer mit 0ns Timeout. Anspruchsvollere Leerlaufverarbeitungsschemata können mit processEvents() erreicht werden.
Siehe auch QCoreApplication::quit(), exit(), und processEvents().
[slot]
void QEventLoop::exit(int returnCode = 0)
Weist die Ereignisschleife an, sich mit einem Rückgabewert zu beenden.
Nachdem diese Funktion aufgerufen wurde, kehrt die Ereignisschleife vom Aufruf von exec() zurück. Die Funktion exec() gibt returnCode zurück.
Gemäß der Konvention bedeutet ein returnCode von 0 Erfolg, und jeder Wert ungleich Null bedeutet einen Fehler.
Beachten Sie, dass diese Funktion im Gegensatz zur gleichnamigen C-Bibliotheksfunktion an den Aufrufer zurückkehrt - die Ereignisverarbeitung wird angehalten.
Siehe auch QCoreApplication::quit(), quit(), und exec().
bool QEventLoop::isRunning() const
Gibt true
zurück, wenn die Ereignisschleife läuft; andernfalls wird false zurückgegeben. Die Ereignisschleife wird ab dem Zeitpunkt des Aufrufs von exec() bis zum Aufruf von exit() als laufend betrachtet.
bool QEventLoop::processEvents(QEventLoop::ProcessEventsFlags flags = AllEvents)
Verarbeitet einige ausstehende Ereignisse, die flags entsprechen. Gibt true
zurück, wenn anstehende Ereignisse bearbeitet wurden; andernfalls false
.
Diese Funktion ist besonders nützlich, wenn Sie eine lange laufende Operation haben und deren Fortschritt anzeigen wollen, ohne Benutzereingaben zuzulassen, d.h. mit dem ExcludeUserInputEvents Flag.
Diese Funktion ist einfach ein Wrapper für QAbstractEventDispatcher::processEvents(). Einzelheiten finden Sie in der Dokumentation dieser Funktion.
[since 6.7]
void QEventLoop::processEvents(QEventLoop::ProcessEventsFlags flags, QDeadlineTimer deadline)
Verarbeitet ausstehende Ereignisse, die mit flags übereinstimmen, bis deadline abgelaufen ist oder bis es keine weiteren Ereignisse mehr zu verarbeiten gibt, je nachdem, was zuerst eintritt. Diese Funktion ist besonders nützlich, wenn Sie eine lang laufende Operation haben und deren Fortschritt anzeigen möchten, ohne dass Benutzereingaben möglich sind, d. h. mit dem Flag ExcludeUserInputEvents.
Hinweise:
- Diese Funktion verarbeitet Ereignisse nicht kontinuierlich; sie kehrt zurück, nachdem alle verfügbaren Ereignisse verarbeitet wurden.
- Die Angabe des Flags WaitForMoreEvents macht keinen Sinn und wird ignoriert.
Diese Funktion wurde in Qt 6.7 eingeführt.
void QEventLoop::processEvents(QEventLoop::ProcessEventsFlags flags, int maxTime)
Dies ist eine überladene Funktion.
Verarbeitet anstehende Ereignisse, die mit flags übereinstimmen, für maximal maxTime Millisekunden oder bis keine weiteren Ereignisse mehr zu verarbeiten sind, je nachdem, was kürzer ist.
Äquivalent zum Aufruf von:
processEvents(flags, QDeadlineTimer(maxTime));
[slot]
void QEventLoop::quit()
Sagt der Ereignisschleife, dass sie normal beendet werden soll.
Dasselbe wie exit(0).
Siehe auch QCoreApplication::quit() und exit().
void QEventLoop::wakeUp()
Weckt die Ereignisschleife auf.
Siehe auch QAbstractEventDispatcher::wakeUp().
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.