1.进入QEventLoop::exec(ProcessEventsFlags flags)函数
2.while (!d->exit.loadAcquire())
processEvents(flags | WaitForMoreEvents | EventLoopExec);(循环监听事件)
3.处理事件 sendPostedEvents();从事件队列里面获取事件,然后对事件进行处理。
4.调用系统获取消息接口: haveMessage = PeekMessage(&msg, 0, 0, 0, PM_REMOVE);
5.分发事件:TranslateMessage(&msg);
DispatchMessage(&msg);
将消息转成Qt事件,然后加入事件队列
template<>
bool QWindowSystemInterfacePrivate::handleWindowSystemEvent<QWindowSystemInterface::AsynchronousDelivery>(WindowSystemEvent *ev)
{
windowSystemEventQueue.append(ev);
if (QAbstractEventDispatcher *dispatcher = QGuiApplicationPrivate::qt_qpa_core_dispatcher())
dispatcher->wakeUp();
return true;
}
6.加入事件队列后,循环这个事件处理过程。调用3步骤

2218

被折叠的 条评论
为什么被折叠?



