有没有办法在没有事件循环的情况下编写GUI?

时间:2016-08-17 21:15:05

标签: c++ user-interface event-handling cross-platform

像Qt这样的库提供了一个处理UI事件的事件循环,通常(或总是?)包装OS UI事件循环以获得最佳结果。

现在我不禁想知道是否有办法在没有主事件循环的情况下编写UI,这样它就适用于所有主要操作系统。

如果这是可能的,它将如何工作,并且在事件循环免费UI(最好是在C ++中)中是否存在任何示例?

2 个答案:

答案 0 :(得分:1)

Windows和X11(Linux)都要求任何窗口都对事件回调负责(或者是当前回答事件回调的窗口的父窗口),否则操作系统会将它们视为停止响应 - 并且在Windows上至少,会触发一个"程序X已停止响应"弹出。

如何需要处理这些事件回调的语义是不同的(即,Windows需要"创建窗口的线程"来处理它们,而Linux需要& #34;主线程"处理它们)但原理是相同的。

我不熟悉MacOS,但我认为它有类似的逻辑。

答案 1 :(得分:0)

我所知道的Allnmajor窗口框架希望与gui apps的事件循环进行交互。

现在,您可以包装ui框架交互并将所述事件传送给事件广播公司。

然后应用程序只会订阅被通知。

现在,在某些情况下,窗口框架可能需要来自消息的同步响应,因此在这些情况下,抽象会稍微泄漏。但是否则你在客户端代码中有一个无事件循环的GUI应用程序(事件循环仍然存在,但仅在跨平台库中)。

在这样的框架中设想编程的一种方法是,你可以设置ui小部件并将它们挂钩到代码,包括像“on app start”这样的钩子,这可能会启动你的主窗口,而后者又会挂钩更多的消息。