c++ - wxWidgets - 事件表与 Connect()?

标签 c++ event-handling wxwidgets

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

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

最佳答案

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

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

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

事件表的主要优点是

  1. 它们稍微短一些,尤其是在 3.0 之前的版本中。
  2. 它们在文档、示例、教程等中更为常见,因为它们在 Bind() 方面领先 15 年。

但是它们使用起来比较笨拙,因为它们需要对对象进行子类化(从中派生新类)以便处理其中的非命令事件,并且它们不会在编译时检测所有错误,从而允许您编写代码编译正常但在运行时崩溃。

关于c++ - wxWidgets - 事件表与 Connect()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21654064/

相关文章:

c++ - 使用 EVT_NAVIGATION_KEY 处理事件不起作用

c++ - wxwidgets 与 gtkmm 符合我的要求

android - android NDK 编译器是否支持内联汇编? (即 asm 或 __asm 关键字?)

C#:在不实际单击按钮的情况下调用按钮事件处理程序方法

javascript - 处理不同对象上的 "mousedown"事件

python - 动态设置wx.GridBagSizer的大小

c++ - 防止派生类强制转换为基类

c++ - *** 检测到堆栈粉碎 *** 使用 FEAST 返回函数时出错

c++ - 无法将 std::string 转换为初始化

c# - 在 Windows 窗体中单击关闭按钮时的事件处理程序