int QApplication::exec()

{

#ifndef QT_NO_ACCESSIBILITY

    QAccessible::setRootObject(qApp);

#endif

    return QCoreApplication::exec();

}

 

 

int QCoreApplication::exec()

{

    if (!QCoreApplicationPrivate::checkInstance("exec"))

        return -1;

    QThreadData *threadData = self->d_func()->threadData;

    if (threadData != QThreadData::current()) {

        qWarning("%s::exec: Must be called from the main thread", self->metaObject()->className());

        return -1;

    }

    if (!threadData->eventLoops.isEmpty()) {

        qWarning("QCoreApplication::exec: The event loop is already running");

        return -1;

    }

    threadData->quitNow = false;

    QEventLoop eventLoop;

    self->d_func()->in_exec = true;

    self->d_func()->aboutToQuitEmitted = false;

    int returnCode = eventLoop.exec();

    threadData->quitNow = false;

    if (self) {

        self->d_func()->in_exec = false;

        if (!self->d_func()->aboutToQuitEmitted)

            emit self->aboutToQuit();

        self->d_func()->aboutToQuitEmitted = true;

        sendPostedEvents(0, QEvent::DeferredDelete);

    }

    return returnCode;

}

 

eventLoop.exec();------》

while (!d->exit)

    processEvents(flags | WaitForMoreEvents | EventLoopExec);

 

 

bool QEventLoop::processEvents(ProcessEventsFlags flags)

{

    Q_D(QEventLoop);

    if (!d->threadData->eventDispatcher)

        return false;

    if (flags & DeferredDeletion)

        QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete);

    return d->threadData->eventDispatcher->processEvents(flags);

}

进一步:这将调用平台相关的函数,比如:

bool QEventDispatcherQWS::processEvents(QEventLoop::ProcessEventsFlags flags)    bool QGuiEventDispatcherWin32::processEvents(QEventLoop::ProcessEventsFlags flags)

int QApplication::qwsProcessEvent(QWSEvent* event)