wxWidgets - 事件表vs Connect()?

Jam*_*s C 8 c++ wxwidgets event-handling

我刚开始用C++学习wxWidgets 3.0版.我已经注意到,wxWidgets中的事件处理是由Event表完成的.但是一个教程也提到了Connect() - 实际上它只是说:"本教程将使用事件表,而不是Connect()".

我想知道,事件表和Connect()背后的哲学是什么?有什么区别,什么时候比另一个更合适......谢谢.

VZ.*_*VZ. 15

首先,不要使用Connect()Bind()取代的东西,它在各方面都更好.

其次,静态(使用事件表)和Bind()处理事件的动态(使用)方法都可以工作,您可以使用任何您喜欢的方法.就个人而言,我建议使用Bind()因为

  1. 它更加灵活:可用于将一个对象上的事件连接到任何其他对象,甚至是自由函数,或者在C++ 11中,用于连接lambda.
  2. 它更安全并且捕获最常见的错误,例如在编译时使用错误的事件处理程序签名.
  3. 它是"动态的",即您可以随时连接和断开处理程序.

事件表的主要优点是

  1. 它们略短,特别是在3.0之前的版本中.
  2. 它们在文档,示例,教程中更为常见......仅仅因为它们有15年的开端Bind().

然而,它们使用起来很笨拙,因为它们需要子类化(从中派生一个新类)以处理其中的非命令事件,并且它们在编译时不会检测到所有错误,从而允许您编写编译良好的代码但是在运行时崩溃.