Qt 4.8
Public Types | Public Slots | Public Functions | List of all members
QEventLoop Class Reference

The QEventLoop class provides a means of entering and leaving an event loop. More...

#include <qeventloop.h>

Inheritance diagram for QEventLoop:
QObject QPatternist::NetworkLoop

Public Types

enum  ProcessEventsFlag {
  AllEvents = 0x00, ExcludeUserInputEvents = 0x01, ExcludeSocketNotifiers = 0x02, WaitForMoreEvents = 0x04,
  X11ExcludeTimers = 0x08, DeferredDeletion = 0x10, EventLoopExec = 0x20, DialogExec = 0x40
}
 This enum controls the types of events processed by the processEvents() functions. More...
 

Public Slots

void quit ()
 Tells the event loop to exit normally. More...
 
- Public Slots inherited from QObject
void deleteLater ()
 Schedules this object for deletion. More...
 

Public Functions

int exec (ProcessEventsFlags flags=AllEvents)
 Enters the main event loop and waits until exit() is called. More...
 
void exit (int returnCode=0)
 Tells the event loop to exit with a return code. More...
 
bool isRunning () const
 Returns true if the event loop is running; otherwise returns false. More...
 
bool processEvents (ProcessEventsFlags flags=AllEvents)
 Processes pending events that match flags until there are no more events to process. More...
 
void processEvents (ProcessEventsFlags flags, int maximumTime)
 Process pending events that match flags for a maximum of maxTime milliseconds, or until there are no more events to process, whichever is shorter. More...
 
 QEventLoop (QObject *parent=0)
 Constructs an event loop object with the given parent. More...
 
void wakeUp ()
 Wakes up the event loop. More...
 
 ~QEventLoop ()
 Destroys the event loop object. More...
 
- Public Functions inherited from QObject
bool blockSignals (bool b)
 If block is true, signals emitted by this object are blocked (i.e., emitting a signal will not invoke anything connected to it). More...
 
const QObjectListchildren () const
 Returns a list of child objects. More...
 
bool connect (const QObject *sender, const char *signal, const char *member, Qt::ConnectionType type=Qt::AutoConnection) const
 
bool disconnect (const char *signal=0, const QObject *receiver=0, const char *member=0)
 
bool disconnect (const QObject *receiver, const char *member=0)
 
void dumpObjectInfo ()
 Dumps information about signal connections, etc. More...
 
void dumpObjectTree ()
 Dumps a tree of children to the debug output. More...
 
QList< QByteArraydynamicPropertyNames () const
 Returns the names of all properties that were dynamically added to the object using setProperty(). More...
 
virtual bool event (QEvent *)
 This virtual function receives events to an object and should return true if the event e was recognized and processed. More...
 
virtual bool eventFilter (QObject *, QEvent *)
 Filters events if this object has been installed as an event filter for the watched object. More...
 
template<typename T >
findChild (const QString &aName=QString()) const
 Returns the child of this object that can be cast into type T and that is called name, or 0 if there is no such object. More...
 
template<typename T >
QList< T > findChildren (const QString &aName=QString()) const
 Returns all children of this object with the given name that can be cast to type T, or an empty list if there are no such objects. More...
 
template<typename T >
QList< T > findChildren (const QRegExp &re) const
 
bool inherits (const char *classname) const
 Returns true if this object is an instance of a class that inherits className or a QObject subclass that inherits className; otherwise returns false. More...
 
void installEventFilter (QObject *)
 Installs an event filter filterObj on this object. More...
 
bool isWidgetType () const
 Returns true if the object is a widget; otherwise returns false. More...
 
void killTimer (int id)
 Kills the timer with timer identifier, id. More...
 
virtual const QMetaObjectmetaObject () const
 Returns a pointer to the meta-object of this object. More...
 
void moveToThread (QThread *thread)
 Changes the thread affinity for this object and its children. More...
 
QString objectName () const
 
QObjectparent () const
 Returns a pointer to the parent object. More...
 
QVariant property (const char *name) const
 Returns the value of the object's name property. More...
 
Q_INVOKABLE QObject (QObject *parent=0)
 Constructs an object with parent object parent. More...
 
void removeEventFilter (QObject *)
 Removes an event filter object obj from this object. More...
 
void setObjectName (const QString &name)
 
void setParent (QObject *)
 Makes the object a child of parent. More...
 
bool setProperty (const char *name, const QVariant &value)
 Sets the value of the object's name property to value. More...
 
void setUserData (uint id, QObjectUserData *data)
 
bool signalsBlocked () const
 Returns true if signals are blocked; otherwise returns false. More...
 
int startTimer (int interval)
 Starts a timer and returns a timer identifier, or returns zero if it could not start a timer. More...
 
QThreadthread () const
 Returns the thread in which the object lives. More...
 
QObjectUserDatauserData (uint id) const
 
virtual ~QObject ()
 Destroys the object, deleting all its child objects. More...
 

Additional Inherited Members

- Signals inherited from QObject
void destroyed (QObject *=0)
 This signal is emitted immediately before the object obj is destroyed, and can not be blocked. More...
 
- Static Public Functions inherited from QObject
static bool connect (const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
 Creates a connection of the given type from the signal in the sender object to the method in the receiver object. More...
 
static bool connect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type=Qt::AutoConnection)
 
static bool disconnect (const QObject *sender, const char *signal, const QObject *receiver, const char *member)
 Disconnects signal in object sender from method in object receiver. More...
 
static bool disconnect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &member)
 
static uint registerUserData ()
 
static QString tr (const char *sourceText, const char *comment=0, int n=-1)
 
static QString trUtf8 (const char *sourceText, const char *comment=0, int n=-1)
 
- Static Public Variables inherited from QObject
static const QMetaObject staticMetaObject
 This variable stores the meta-object for the class. More...
 
- Protected Functions inherited from QObject
virtual void childEvent (QChildEvent *)
 This event handler can be reimplemented in a subclass to receive child events. More...
 
virtual void connectNotify (const char *signal)
 This virtual function is called when something has been connected to signal in this object. More...
 
virtual void customEvent (QEvent *)
 This event handler can be reimplemented in a subclass to receive custom events. More...
 
virtual void disconnectNotify (const char *signal)
 This virtual function is called when something has been disconnected from signal in this object. More...
 
 QObject (QObjectPrivate &dd, QObject *parent=0)
 
int receivers (const char *signal) const
 Returns the number of receivers connected to the signal. More...
 
QObjectsender () const
 Returns a pointer to the object that sent the signal, if called in a slot activated by a signal; otherwise it returns 0. More...
 
int senderSignalIndex () const
 
virtual void timerEvent (QTimerEvent *)
 This event handler can be reimplemented in a subclass to receive timer events for the object. More...
 
- Protected Variables inherited from QObject
QScopedPointer< QObjectDatad_ptr
 
- Static Protected Variables inherited from QObject
static const QMetaObject staticQtMetaObject
 

Detailed Description

The QEventLoop class provides a means of entering and leaving an event loop.

At any time, you can create a QEventLoop object and call exec() on it to start a local event loop. From within the event loop, calling exit() will force exec() to return.

See also
QAbstractEventDispatcher

Definition at line 55 of file qeventloop.h.

Enumerations

◆ ProcessEventsFlag

This enum controls the types of events processed by the processEvents() functions.

  • ExcludeUserInputEvents Do not process user input events, such as ButtonPress and KeyPress. Note that the events are not discarded; they will be delivered the next time processEvents() is called without the ExcludeUserInputEvents flag.
  • ExcludeSocketNotifiers Do not process socket notifier events. Note that the events are not discarded; they will be delivered the next time processEvents() is called without the ExcludeSocketNotifiers flag.
  • WaitForMoreEvents Wait for events if no pending events are available.
  • X11ExcludeTimers
  • ExcludeUserInput
  • WaitForMore
  • EventLoopExec
  • DialogExec
  • DeferredDeletion deprecated - do not use.
See also
processEvents()
Enumerator
AllEvents 
ExcludeUserInputEvents 
ExcludeSocketNotifiers 
WaitForMoreEvents 
X11ExcludeTimers 
DeferredDeletion 
EventLoopExec 
DialogExec 

Definition at line 64 of file qeventloop.h.

64  {
65  AllEvents = 0x00,
68  WaitForMoreEvents = 0x04,
69 #ifdef QT3_SUPPORT
70  ExcludeUserInput = ExcludeUserInputEvents,
71  WaitForMore = WaitForMoreEvents,
72 #endif
73  X11ExcludeTimers = 0x08
74 #ifdef QT_DEPRECATED
75  , DeferredDeletion = 0x10
76 #endif
77  , EventLoopExec = 0x20
78  , DialogExec = 0x40
79  };

Constructors and Destructors

◆ QEventLoop()

QEventLoop::QEventLoop ( QObject parent = 0)
explicit

Constructs an event loop object with the given parent.

Definition at line 117 of file qeventloop.cpp.

118  : QObject(*new QEventLoopPrivate, parent)
119 {
120  Q_D(QEventLoop);
122  qWarning("QEventLoop: Cannot be used without QApplication");
123  } else if (!d->threadData->eventDispatcher) {
125  }
126 }
double d
Definition: qnumeric_p.h:62
#define Q_D(Class)
Definition: qglobal.h:2482
The QEventLoop class provides a means of entering and leaving an event loop.
Definition: qeventloop.h:55
Q_CORE_EXPORT void qWarning(const char *,...)
static QCoreApplication * instance()
Returns a pointer to the application&#39;s QCoreApplication (or QApplication) instance.
Q_INVOKABLE QObject(QObject *parent=0)
Constructs an object with parent object parent.
Definition: qobject.cpp:753
static void createEventDispatcher(QThreadData *data)

◆ ~QEventLoop()

QEventLoop::~QEventLoop ( )

Destroys the event loop object.

Definition at line 131 of file qeventloop.cpp.

132 { }

Functions

◆ exec()

int QEventLoop::exec ( ProcessEventsFlags  flags = AllEvents)

Enters the main event loop and waits until exit() is called.

Returns the value that was passed to exit().

If flags are specified, only events of the types allowed by the flags will be processed.

It is necessary to call this function to start event handling. The main event loop receives events from the window system and dispatches these to the application widgets.

Generally speaking, no user interaction can take place before calling exec(). As a special case, modal widgets like QMessageBox can be used before calling exec(), because modal widgets use their own local event loop.

To make your application perform idle processing (i.e. executing a special function whenever there are no pending events), use a QTimer with 0 timeout. More sophisticated idle processing schemes can be achieved using processEvents().

See also
QApplication::quit(), exit(), processEvents()

Definition at line 181 of file qeventloop.cpp.

Referenced by QTestEventLoop::enterLoop(), QScriptEngineDebuggerBackend::event(), QThread::exec(), QCoreApplication::exec(), QCoreApplication::hasPendingEvents(), QMenuPrivate::hideMenu(), QComboBox::hidePopup(), QMenuPrivate::hideUpToMenuBar(), QDBusConnectionPrivate::sendWithReply(), QHttpThreadDelegate::startRequestSynchronously(), and QNetworkSession::waitForOpened().

182 {
183  Q_D(QEventLoop);
184  //we need to protect from race condition with QThread::exit
185  QMutexLocker locker(&static_cast<QThreadPrivate *>(QObjectPrivate::get(d->threadData->thread))->mutex);
186  if (d->threadData->quitNow)
187  return -1;
188 
189  if (d->inExec) {
190  qWarning("QEventLoop::exec: instance %p has already called exec()", this);
191  return -1;
192  }
193  d->inExec = true;
194  d->exit = false;
195  ++d->threadData->loopLevel;
196  d->threadData->eventLoops.push(this);
197  locker.unlock();
198 
199  // remove posted quit events when entering a new event loop
201  if (app && app->thread() == thread())
203 
204 #if defined(QT_NO_EXCEPTIONS)
205  while (!d->exit)
207 #else
208  try {
209  while (!d->exit)
211  } catch (...) {
212  qWarning("Qt has caught an exception thrown from an event handler. Throwing\n"
213  "exceptions from an event handler is not supported in Qt. You must\n"
214  "reimplement QApplication::notify() and catch all exceptions there.\n");
215 
216  // copied from below
217  locker.relock();
218  QEventLoop *eventLoop = d->threadData->eventLoops.pop();
219  Q_ASSERT_X(eventLoop == this, "QEventLoop::exec()", "internal error");
220  Q_UNUSED(eventLoop); // --release warning
221  d->inExec = false;
222  --d->threadData->loopLevel;
223 
224  throw;
225  }
226 #endif
227 
228  // copied above
229  locker.relock();
230  QEventLoop *eventLoop = d->threadData->eventLoops.pop();
231  Q_ASSERT_X(eventLoop == this, "QEventLoop::exec()", "internal error");
232  Q_UNUSED(eventLoop); // --release warning
233  d->inExec = false;
234  --d->threadData->loopLevel;
235 
236  return d->returnCode;
237 }
double d
Definition: qnumeric_p.h:62
#define Q_D(Class)
Definition: qglobal.h:2482
static QObjectPrivate * get(QObject *o)
Definition: qobject_p.h:177
The QEventLoop class provides a means of entering and leaving an event loop.
Definition: qeventloop.h:55
Q_CORE_EXPORT void qWarning(const char *,...)
The QCoreApplication class provides an event loop for console Qt applications.
#define Q_ASSERT_X(cond, where, what)
Definition: qglobal.h:1837
The QMutexLocker class is a convenience class that simplifies locking and unlocking mutexes...
Definition: qmutex.h:101
static QCoreApplication * instance()
Returns a pointer to the application&#39;s QCoreApplication (or QApplication) instance.
removePostedEvents
Removes all events of the given eventType that were posted using postEvent() for receiver.
QThread * thread() const
Returns the thread in which the object lives.
Definition: qobject.cpp:1419
#define Q_UNUSED(x)
Indicates to the compiler that the parameter with the specified name is not used in the body of a fun...
Definition: qglobal.h:1729
bool processEvents(ProcessEventsFlags flags=AllEvents)
Processes pending events that match flags until there are no more events to process.
Definition: qeventloop.cpp:148

◆ exit()

void QEventLoop::exit ( int  returnCode = 0)

Tells the event loop to exit with a return code.

After this function has been called, the event loop returns from the call to exec(). The exec() function returns returnCode.

By convention, a returnCode of 0 means success, and any non-zero value indicates an error.

Note that unlike the C library function of the same name, this function does return to the caller – it is event processing that stops.

See also
QCoreApplication::quit(), quit(), exec()

Definition at line 288 of file qeventloop.cpp.

Referenced by QPatternist::NetworkLoop::error(), QThread::exit(), QCoreApplication::exit(), QTestEventLoop::exitLoop(), QPatternist::NetworkLoop::finished(), QCoreApplication::hasPendingEvents(), and quit().

289 {
290  Q_D(QEventLoop);
291  if (!d->threadData->eventDispatcher)
292  return;
293 
294  d->returnCode = returnCode;
295  d->exit = true;
296  d->threadData->eventDispatcher->interrupt();
297 }
double d
Definition: qnumeric_p.h:62
#define Q_D(Class)
Definition: qglobal.h:2482
The QEventLoop class provides a means of entering and leaving an event loop.
Definition: qeventloop.h:55

◆ isRunning()

bool QEventLoop::isRunning ( ) const

Returns true if the event loop is running; otherwise returns false.

The event loop is considered running from the time when exec() is called until exit() is called.

See also
exec() exit()

Definition at line 306 of file qeventloop.cpp.

Referenced by QScriptEngineDebuggerBackend::event(), QScriptEngineDebuggerBackend::resume(), and QScriptEngineDebuggerBackendPrivate::~QScriptEngineDebuggerBackendPrivate().

307 {
308  Q_D(const QEventLoop);
309  return !d->exit;
310 }
double d
Definition: qnumeric_p.h:62
#define Q_D(Class)
Definition: qglobal.h:2482
The QEventLoop class provides a means of entering and leaving an event loop.
Definition: qeventloop.h:55

◆ processEvents() [1/2]

bool QEventLoop::processEvents ( ProcessEventsFlags  flags = AllEvents)

Processes pending events that match flags until there are no more events to process.

Returns true if pending events were handled; otherwise returns false.

This function is especially useful if you have a long running operation and want to show its progress without allowing user input; i.e. by using the ExcludeUserInputEvents flag.

This function is simply a wrapper for QAbstractEventDispatcher::processEvents(). See the documentation for that function for details.

Definition at line 148 of file qeventloop.cpp.

Referenced by exec(), and processEvents().

149 {
150  Q_D(QEventLoop);
151  if (!d->threadData->eventDispatcher)
152  return false;
153  if (flags & DeferredDeletion)
155  return d->threadData->eventDispatcher->processEvents(flags);
156 }
double d
Definition: qnumeric_p.h:62
#define Q_D(Class)
Definition: qglobal.h:2482
The QEventLoop class provides a means of entering and leaving an event loop.
Definition: qeventloop.h:55
static void sendPostedEvents()

◆ processEvents() [2/2]

void QEventLoop::processEvents ( ProcessEventsFlags  flags,
int  maxTime 
)

Process pending events that match flags for a maximum of maxTime milliseconds, or until there are no more events to process, whichever is shorter.

This function is especially useful if you have a long running operation and want to show its progress without allowing user input, i.e. by using the ExcludeUserInputEvents flag.

Notes:

  • This function does not process events continuously; it returns after all available events are processed.
  • Specifying the WaitForMoreEvents flag makes no sense and will be ignored.

Definition at line 255 of file qeventloop.cpp.

256 {
257  Q_D(QEventLoop);
258  if (!d->threadData->eventDispatcher)
259  return;
260 
261  QElapsedTimer start;
262  start.start();
263  if (flags & DeferredDeletion)
265  while (processEvents(flags & ~WaitForMoreEvents)) {
266  if (start.elapsed() > maxTime)
267  break;
268  if (flags & DeferredDeletion)
270  }
271 }
double d
Definition: qnumeric_p.h:62
#define Q_D(Class)
Definition: qglobal.h:2482
The QElapsedTimer class provides a fast way to calculate elapsed times.
Definition: qelapsedtimer.h:53
qint64 elapsed() const
Returns the number of milliseconds since this QElapsedTimer was last started.
The QEventLoop class provides a means of entering and leaving an event loop.
Definition: qeventloop.h:55
static void sendPostedEvents()
void start()
Starts this timer.
bool processEvents(ProcessEventsFlags flags=AllEvents)
Processes pending events that match flags until there are no more events to process.
Definition: qeventloop.cpp:148

◆ quit

void QEventLoop::quit ( )
slot

Tells the event loop to exit normally.

Same as exit(0).

See also
QCoreApplication::quit(), exit()

Definition at line 332 of file qeventloop.cpp.

Referenced by QScriptEngineDebuggerBackend::resume(), and QScriptEngineDebuggerBackendPrivate::~QScriptEngineDebuggerBackendPrivate().

333 { exit(0); }
void exit(int returnCode=0)
Tells the event loop to exit with a return code.
Definition: qeventloop.cpp:288

◆ wakeUp()

void QEventLoop::wakeUp ( )

Wakes up the event loop.

See also
QAbstractEventDispatcher::wakeUp()

Definition at line 317 of file qeventloop.cpp.

318 {
319  Q_D(QEventLoop);
320  if (!d->threadData->eventDispatcher)
321  return;
322  d->threadData->eventDispatcher->wakeUp();
323 }
double d
Definition: qnumeric_p.h:62
#define Q_D(Class)
Definition: qglobal.h:2482
The QEventLoop class provides a means of entering and leaving an event loop.
Definition: qeventloop.h:55

The documentation for this class was generated from the following files: