在gui中处理子到父鼠标和键盘事件的最佳方法
Best way to deal with child to parent mouse and keyboard events in a gui?
对于我的Gui,我想使用以下系统:它的工作方式是,如果鼠标下的小部件没有消耗鼠标或kb事件,它将被传递给该小部件的父级,直到它被消耗或到达桌面。
只有一件事让我困惑。这是否意味着,如果一个按钮,不管出于什么原因,有一个Label作为它的一个子。如果我单击标签,这是否意味着标签下的按钮将单击(因为标签不消耗鼠标),这在本例中是不希望的。这是否意味着我必须执行if(mouseEvent。Source == this){do button stuff} ?谢谢
如果标签是子部件,那么是的,标签将尝试吃掉事件,失败(因为通常标签没有处理程序方法),因此将事件传递回按钮。
要做到这一点,最简单的方法可能是派生Label类的子类,并重写句柄函数(假设这在您的工具包中是可能的——在任何像样的工具包中都应该是这样)。然后,您可以使用句柄函数来捕获鼠标点击,并将任何其他事件传递回按钮。比较指针可能是一个坏主意,并且稍微依赖于工具包的实现方式—例如,它可能将源视为按钮(因为这是它所期望的),而不是标签。
虽然我觉得标签本身就是一个小部件非常奇怪.....
看起来您需要一种特殊的"Label"来处理鼠标事件。您应该能够创建一个定制的小部件(从Label派生),该小部件使用针对此特定情况的鼠标事件。
如果Label小部件来自第三方,不能被派生/子类化,则应该将Label包装在另一个小部件中:一个使用鼠标事件的简单小部件,只有一个子部件,即原始Label。
相关文章:
- SDL2 无法捕获控制台键盘事件?
- GTKMM:如何将键盘事件附加到绘图区域?
- OpenCV 为键盘事件设置回调
- Qt应用程序不响应鼠标和键盘事件
- 如何在Windows 8中以编程方式触发鼠标和键盘事件
- 捕获 HID 键盘事件
- 捕获Linux/Ubuntu(屏幕捕获 鼠标/键盘事件)中的窗口事件
- 捕获鼠标但未聚焦窗口时捕获键盘事件(Win32)
- 键盘事件:订单是否得到保证
- 监视进程内的键盘事件(进程范围)
- wxWidgets 键盘事件
- SFML - 键盘事件
- 在Qt C++中通过类管理键盘事件
- 管理Win32应用程序和QWinMigrate之间的键盘事件
- QT双击键盘事件
- 如何在Linux和Windows上的Qt中模拟所有鼠标和键盘事件
- 如何在c++中钩子键盘事件
- 如何将键盘事件发送到windows中的各种应用程序
- 在Qt中获取应用程序外部的键盘事件
- 键盘事件的数据结构