我刚开始学习使用C++编写wxWidgets版本3.0。我注意到,wxWidgets中的事件处理是通过事件表完成的。但是有一篇教程也提到了Connect()函数——实际上它只是说:“这篇教程将使用事件表,而不是Connect()函数。”
我想知道,事件表和Connect()函数背后的哲学是什么?它们之间的区别是什么?在什么情况下使用其中一种比另一种更合适……谢谢。
我刚开始学习使用C++编写wxWidgets版本3.0。我注意到,wxWidgets中的事件处理是通过事件表完成的。但是有一篇教程也提到了Connect()函数——实际上它只是说:“这篇教程将使用事件表,而不是Connect()函数。”
我想知道,事件表和Connect()函数背后的哲学是什么?它们之间的区别是什么?在什么情况下使用其中一种比另一种更合适……谢谢。
首先,不要使用已被Bind()所取代的Connect()
方法,因为它在各个方面都更好。
其次,处理事件的静态方法(使用事件表)和动态方法(使用Bind()
)都有效,您可以根据自己的喜好选择。就我个人而言,我建议使用Bind()
,因为:
事件表的主要优点是:
Bind()
早15年。但是,它们使用起来比较笨拙,因为它们需要对对象进行子类化(从中派生一个新类)以处理其中的非命令事件,并且它们无法在编译时检测所有错误,从而允许您编写可以编译但在运行时崩溃的代码。