【问题标题】:What is an event loop in Qt?Qt 中的事件循环是什么?
【发布时间】:2017-04-14 08:07:28
【问题描述】:

关于QApplication的exec函数,我已经了解了以下内容:

QApplication exec 启动主事件循环。 它启动 GUI。它处理信号并在接收到它们时调用适当的槽。它一直等到调用 exit 并返回在 exit 中设置的值。

现在,当我们说事件循环时,是不是说Qt的内部代码中有一些while循环在运行,并且在那个while循环中写了处理信号和槽的方法?

【问题讨论】:

  • 事件循环意味着你的代码一直在运行,把它想象成每次都在刷新,所以会根据你的情况不断地看到和做出改变。
  • 你可以把它想象成一个事件驱动的程序,只是不断的等待事件,然后会做一些事情。大多数 GUI 和游戏都使用事件循环。在游戏开发中有一个事件循环,因为你需要不断地检查用户是否做了某事,所以需要有一个事件发生。
  • 直连槽不进入事件队列,只进入队列连接。
  • 这对我真的很有帮助,看看link
  • 请注意,事件循环与信号和插槽本身的概念无关。它被用作在队列连接中或在自动连接中跨线程传递槽/函子调用的实现细节。

标签: c++ qt event-loop qapplication


【解决方案1】:

现在,当我们说事件循环时,是不是意味着有一些 while 循环在 Qt 的内部代码中运行,并且在那个 while 循环中 信号和槽的处理方法写了吗?

从某种意义上说,是的。如今,大多数软件都在等待事件——用户输入、网络流量、定时器事件、传感器等——并做出相应的响应。

这不是 Qt 特有的。从 Windows 到 Android 再到 Arduino,这是一种常见的设计模式。

【讨论】:

  • 这不仅“在某种意义上”,而且确实是真的。 while 循环位于 $QTDIR/src/corelib/kernel/qeventloop.cpp 的第 203 行,在 QEventLoop::exec() 内部:while (!d->exit.loadAcquire()) processEvents(flags | WaitForMoreEvents | EventLoopExec );
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-31
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 2019-02-20
  • 1970-01-01
相关资源
最近更新 更多