Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有没有一种方法可以编写没有事件循环的GUI?_C++_User Interface_Event Handling_Cross Platform - Fatal编程技术网

C++ 有没有一种方法可以编写没有事件循环的GUI?

C++ 有没有一种方法可以编写没有事件循环的GUI?,c++,user-interface,event-handling,cross-platform,C++,User Interface,Event Handling,Cross Platform,Qt之类的库提供了一个处理UI事件的事件循环,通常(或总是?)包装OS UI事件循环以获得最佳结果 现在,我不禁想知道是否有一种方法可以在没有主事件循环的情况下编写UI,这样它就可以在所有主要操作系统上工作 如果这是可能的,它将如何工作,以及在无事件循环UI(最好是C++中)的领域中是否有任何示例?Windows和X11(Linux)都要求任何窗口都对事件回调负责(或者是当前应答事件回调的窗口的父窗口),否则,操作系统会将它们视为停止响应,至少在Windows上,会触发“程序X已停止响应”弹出窗

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

现在,我不禁想知道是否有一种方法可以在没有主事件循环的情况下编写UI,这样它就可以在所有主要操作系统上工作

如果这是可能的,它将如何工作,以及在无事件循环UI(最好是C++中)的领域中是否有任何示例?

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

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


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

我知道的所有主要窗口框架都希望通过gui应用程序与事件循环进行交互

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

然后应用程序将只订阅通知

现在,在某些情况下,窗口化框架可能需要来自消息的同步响应,因此在这些情况下,抽象将有点泄漏。但如果不是这样,您可以在客户端代码中使用一个无事件循环的GUI应用程序(事件循环仍然存在,但只存在于跨平台库中)


想象在这样一个框架中编程的一种方式是,您可以设置ui小部件并将其与代码挂钩,包括“应用程序启动”之类的挂钩,它可能启动主窗口,进而挂钩更多消息。

可能不会。抱歉。如果您不与操作系统的事件系统/队列交互,您(作为用户空间程序)将如何接收事件?是的,但您必须使用尚未发明的技术从头开始编写新的操作系统来响应用户交互。linux有windows的概念吗?这对我来说是新鲜事。你能详细说明一下吗?@πάνταῥεῖ 呃,更新了。实际上,我使用过的每个版本的Linux都有某种形式的GUI,所以我习惯将它们归为“Linux”。X11有windows的概念,X有一个事件循环。我想这就是所指的。但你绝对正确,那不是Linux的东西,而是X的东西。