wxWidgets - 事件表vs Connect()?

时间:2014-02-09 01:28:33

标签: c++ event-handling wxwidgets

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

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

1 个答案:

答案 0 :(得分:14)

首先,不要使用被Bind()取代的Connect(),这种方法在各个方面都更好。

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

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

    1. 它们略短,特别是在3.0之前的版本中。
    2. 它们在文档,示例,教程中更为常见......仅仅因为它们在Bind()上开了15年。
    3. 然而,它们使用起来比较笨拙,因为它们需要子类化(从中派生一个新类)以处理其中的非命令事件,并且它们在编译时不会检测到所有错误,从而允许您编写代码编译好但在运行时崩溃。