我刚刚开始使用 C++ 学习 wxWidgets 3.0 版。我已经注意到,wxWidgets 中的事件处理是由事件表完成的。但一篇教程也提到了 Connect() - 实际上它只是说:“本教程将使用事件表,而不是 Connect()”。
我想知道事件表和 Connect() 背后的原理是什么?有什么区别,什么时候一个比另一个更合适......谢谢。
首先,不要使用Connect()
被取代Bind() http://docs.wxwidgets.org/trunk/classwx_evt_handler.html#a0f30c8fa5583b4a5f661897d63de3b62这在各方面都更好。
其次,静态(使用事件表)和动态(使用Bind()
) 处理事件的方法有效,您可以使用您喜欢的任何方法。就我个人而言,我建议使用Bind()
because
- 它更加灵活:可用于将一个对象上的事件连接到任何其他对象,甚至是一个自由函数,或者在 C++11 中,a lambda http://wxwidgets.blogspot.com/2013/08/wxwidgets-and-c-11.html.
- 它更安全,可以捕获最常见的错误,例如在编译时使用错误的事件处理程序签名。
- 它是“动态的”,即您可以随时连接和断开处理程序。
事件表的主要优点是
- 它们稍微短一些,特别是在 3.0 之前的版本中。
- 它们在文档、示例、教程中更为常见……只是因为它们在这方面领先 15 年
Bind()
.
然而,它们使用起来比较笨拙,因为它们需要对对象进行子类化(从中派生新类)才能处理其中的非命令事件,并且它们不会在编译时检测到所有错误,从而允许您编写编译良好但运行时崩溃。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)