wxWidgets - 事件表与 Connect()?

2024-02-24

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

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


首先,不要使用Connect()被取代Bind() http://docs.wxwidgets.org/trunk/classwx_evt_handler.html#a0f30c8fa5583b4a5f661897d63de3b62这在各方面都更好。

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

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

事件表的主要优点是

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

wxWidgets - 事件表与 Connect()? 的相关文章

  • 使用 std::packaged_task/std::exception_ptr 时,线程清理程序报告数据争用

    我遇到了线程清理程序 TSan 的一些问题 抱怨某些生产代码中的数据争用 其中 std packaged task 通过将它们包装在 std function 中而移交给调度程序线程 对于这个问题 我简化了它在生产中的作用 同时触发 TSa
  • 如何在 .NET Framework 2.0 中模拟“Func<(Of <(TResult>)>) 委托”?

    我尝试使用这个类代码项目文章 http www codeproject com KB threads AsyncVar aspx在 VB NET 和 NET Framework 2 0 中 除了这一行之外 所有内容似乎都可以编译Privat
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 单个对象的 Monogame XNA 变换矩阵?

    我读过一些解释 XNA Monogame 变换矩阵的教程 问题是这些矩阵应用于 SpriteBatch Begin matrix 这意味着所有 Draw 代码都将被转换 如何将变换矩阵应用于单个可绘制对象 就我而言 我想转换滚动背景 使其自
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 为什么 Google 测试会出现段错误?

    我是 Google Test 的新手 正在尝试提供的示例 我的问题是 当我引入失败并设置GTEST BREAK ON FAILURE 1 或使用命令行选项 GTest 将出现段错误 我正在考虑这个例子 https code google c
  • 由 IHttpClientFactory 注入时模拟 HttpClient 处理程序

    我创建了一个自定义库 它会自动为依赖于特定服务的 Polly 策略设置HttpClient 这是使用以下方法完成的IServiceCollection扩展方法和类型化客户端方法 一个简化的例子 public static IHttpClie
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • 我可以使用 moq Mock 来模拟类而不是接口吗?

    正在经历https github com Moq moq4 wiki Quickstart https github com Moq moq4 wiki Quickstart 我看到它 Mock 一个接口 我的遗留代码中有一个没有接口的类
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • 使用 %d 打印 unsigned long long

    为什么我打印以下内容时得到 1 unsigned long long int largestIntegerInC 18446744073709551615LL printf largestIntegerInC d n largestInte
  • 按 Esc 按键关闭 Ajax Modal 弹出窗口

    我已经使用 Ajax 显示了一个面板弹出窗口 我要做的是当用户按 Esc 键时关闭该窗口 这可能吗 如果有人知道这一点或以前做过这一点 请帮助我 Thanks 通过以下链接 您可以通过按退出按钮轻松关闭窗口 http www codepro
  • 不同类型指针之间的减法[重复]

    这个问题在这里已经有答案了 我试图找到两个变量之间的内存距离 具体来说 我需要找到 char 数组和 int 之间的距离 char data 5 int a 0 printf p n p n data 5 a long int distan
  • 调用堆栈中的“外部代码”是什么意思?

    我在 Visual Studio 中调用一个方法 并尝试通过检查调用堆栈来调试它 其中一些行标记为 外部代码 这到底是什么意思 方法来自 dll已被处决 外部代码 意味着该dll没有可用的调试信息 你能做的就是在Call Stack窗口中单
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • 无法接收 UDP Windows RT

    我正在为 Windows 8 RT 编写一个 Windows Store Metro Modern RT 应用程序 需要在端口 49030 上接收 UDP 数据包 但我似乎无法接收任何数据包 我已按照使用教程进行操作DatagramSock
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com

随机推荐

  • 将 csv 转换为 JSON 树结构?

    我读了这些问题 csv数据到d3中的嵌套json树 https stackoverflow com questions 19043561 csv data to nested json tree in d3 在python中从csv列表创建
  • 使用 @DefaultProperty 时“元素未定义默认属性”

    我正在尝试创建一个自定义 JavaFX 元素以在 FXML 中使用 但是当FXMLLoader尝试解析它 它抛出一个异常 指出 javafx fxml LoadException 元素未定义默认属性 然而 经过一些研究后 我相信我正确地定义
  • SQLite动态查询

    我有一个 SQLite 数据库 我想做的是用户选择一个过滤器 例如 我有一个书籍数据库 用户只想查看 阿加莎克里斯蒂的书籍 中的数据 因此 我制作了一个带有选择选项的微调器 然后有意将所选字段传递给执行查询选择的另一个活动 我的问题是 如何
  • 将内联 SQL 转换为存储过程

    我正在开发现有的 ASP NET 应用程序 当前的应用程序使用了大量的内联查询 现在他们只想将所有查询重写为存储过程 我的问题是 这些查询非常 动态 并且查询是根据不同的条件连接起来的if else条件 例如 string query Se
  • 为什么 RestTemplate 会消耗过多的内存?

    Question 为什么 Spring 的 RestTemplate 使用过多的堆 特别是G1 Old Generation 发送文件时 Context 我们观察到休息模板 https docs spring io spring frame
  • LINQ 中的条件Where 子句

    假设我在网格中显示数据 并且有许多文本框用于过滤数据 员工 ID 的文本框 如果员工 ID 文本框为空 则不会添加 where 子句 但如果不为空 则将添加 where 子句 如果工资文本框有值或员工姓名文本框有值 我们可以以同样的方式过滤
  • 经典蓝牙 (2.1) 设备可实现的最小数据包延迟是多少?

    我正在使用 RN42 http www microchip com wwwproducts en RN42 http www microchip com wwwproducts en RN42 蓝牙模块以 115200 波特率 UART S
  • gem install Rails 构建错误无法构建 gem 本机扩展

    我的主要目标是让Redmine 与WAMPServer 一起工作 我按照以下步骤操作 如何与 WampServer 一起安装 Ruby on Rails https stackoverflow com questions 2025449 h
  • 在 TypeScript 中导入 JSON 文件

    我有一个JSON文件如下所示 primaryBright 2DC6FB primaryMain 05B4F0 primaryDarker 04A1D7 primaryDarkest 048FBE secondaryBright 4CD2C0
  • jQuery、Chrome 和“selected”属性异常

    我在 Chrome 中遇到了一个问题 但我无法判断这是 Chrome 的错误 jQuery 的错误还是我的代码中的错误 我搜索了 Chromium 的未解决问题 但找不到任何内容 jQuery 也是如此 我在这里创建了一个 JSFiddle
  • 在 Node.js 中,给定一个 URL,如何检查它是否是 jpg/png/gif?

    我目前的方法是这样的 var request require request var mime require mime var fs require fs var uri http www sweetslyrics com images
  • 为什么 CodeIgniter 中的分页链接对我不起作用?

    我正在尝试对我的产品使用 codeigniter 分页 因此有多个产品页面 但它不适合我 我不知道为什么 这是我的控制器中的分页功能 code om in allecadeaus te bepalen hoeveel producten e
  • 如果必要的单元测试失败,我可以使单元测试不确定吗?

    考虑对字典对象进行单元测试 您可能编写的第一个单元测试只是将项目添加到字典并检查异常 下一个测试可能类似于测试计数是否准确 或者字典是否返回正确的键或值列表 然而 后面的每种情况都要求字典首先能够可靠地添加项目 如果添加项目的测试失败 我们
  • 贝宝和PHP?

    我有两种方法可以从用户处检查 1 if user input Amount field lt 5 user credit do update database the remain amount in my database table 2
  • 急切地评估 Prolog 中的所有谓词调用

    正在阅读有关元谓词的 SWI Prolog 文档 http www swi prolog org pldoc man section metapred 我最初假设call f 相当于f where f是一些谓词 但我观察到 在某些情况下 两
  • 是否可以用 Java 构建这样的自定义 GUI?

    我在 Photoshop 中制作了这个 我计划将其用于我的文件共享应用程序 我想知道是否可以为我的应用程序创建具有这种外观和感觉的 GUI 如果我无法仅使用 eclipse 或 NetBeans 来构建它 还有其他工具可以帮助我吗 哦 亲爱
  • 我何时以及为什么需要supportedRuntime元素和sku属性?

    在 Visual Studio 中创建的大多数 如果不是全部 C 以及 F 和 VB 库和可执行项目中 都会自动添加app config指定运行时版本和目标框架名称 TFM 的文件
  • Laravel 4.1:雄辩的偏移和限制

    如何限制 Eloquent 返回的数据 我尝试过这个 data Product all gt take 4 gt skip 3 它返回错误消息 Call to undefined method Illuminate Database Elo
  • 如何使用 sendmessage 发送 win32 中具有计时器过程的 wm_timer

    我有一个计时器 ID 1 它有一个timerproc作为回调函数 我正在 timeproc 中制作其他计时器 ID 2 3 它们使用WM TIMER事件 而不是另一个计时器进程 创建窗口时 我想立即生成定时器事件 ID 1 所以我像这样使用
  • wxWidgets - 事件表与 Connect()?

    我刚刚开始使用 C 学习 wxWidgets 3 0 版 我已经注意到 wxWidgets 中的事件处理是由事件表完成的 但一篇教程也提到了 Connect 实际上它只是说 本教程将使用事件表 而不是 Connect 我想知道事件表和 Co