zoukankan      html  css  js  c++  java
  • qt exec

    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)

  • 相关阅读:
    面向对象基本原则
    策略模式
    简单工厂模式
    高内聚、低耦合
    UML在代码中的展现
    使用commons-csv简单读写CSV文件
    java反射机制
    SrpingDruid数据源加密数据库密码
    markdown学习经验
    Vue.js学习笔记
  • 原文地址:https://www.cnblogs.com/cute/p/2231263.html
Copyright © 2011-2022 走看看