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

void exit(int returnCode = 0)
void quit()

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.

KonstanteWertBeschreibung
QEventLoop::AllEvents0x00Alle Ereignisse. Beachten Sie, dass DeferredDelete Ereignisse speziell verarbeitet werden. Siehe QObject::deleteLater() für weitere Einzelheiten.
QEventLoop::ExcludeUserInputEvents0x01Verarbeiten 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::ExcludeSocketNotifiers0x02Socket 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::WaitForMoreEvents0x04Warten 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.

Siehe auch exec() und exit().

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.