如今,大多数GUI工具包都使用Signals + Slots模型。没错,是Qt和GTK +率先提出的。
您知道,小部件或图形对象(有时甚至是未显示的小部件)将信号发送到主循环处理程序。然后,主循环处理程序调用为该小部件/图形对象分配的事件,回调或插槽。virtual
工具包通常已经提供了默认的(大多数情况下)事件处理程序来处理所有预定义的信号,因此,与以前的设计不同,开发人员必须自己为每个消息编写整个主循环和处理程序。 (例如WINAPI),开发人员只需要担心实现新功能所需的信号。
据我所知,现在大多数现代工具箱都使用了这种设计。有Qt,GTK +,FLTK等。还有Java Swing。C#甚至具有它的语言功能(事件和委托),并且Windows Forms已在此设计上开发。实际上,在过去的十年中,这种用于GUI编程的设计已经成为一种不成文的标准。由于它提高了生产率并提供了更好的抽象。
但是,我的问题是:
对于现代GUI编程,是否有并行或实用的替代设计?
即信号+插槽设计是镇上唯一实用的设计吗?用任何其他设计进行GUI编程是否可行?是否有任何其他现代(最好是成功且流行的)GUI工具箱都基于替代设计?
std::function
,而不是异步信号。此外,WinAPI 确实提供了DefWindowProc
将Windows消息作为默认实现来处理的功能。因此,我认为您的问题基于错误的逻辑。