在gui中处理子到父鼠标和键盘事件的最佳方法?

时间:2011-04-10 00:01:39

标签: c++ user-interface

对于我的Gui,我想使用以下系统: 它的工作方式是,如果鼠标下的小部件不消耗鼠标或kb事件,它将被传递给该小部件的父级,直到它被消耗或者到达桌面为止。

只有一件事让我感到困惑。这是否意味着如果Button因任何原因将Label作为其子项之一。如果我点击标签,这不意味着我的标签下面的按钮会点击(因为标签不会消耗鼠标),这在这种情况下是不受欢迎的。这是否意味着我必须做if(mouseEvent.source == this){do button stuff}?

由于

2 个答案:

答案 0 :(得分:0)

看起来你需要一种特殊的“标签”来消耗鼠标事件。您应该能够创建一个自定义小部件(派生自Label),该小部件使用针对此特定情况的鼠标事件。

如果Label小部件来自无法派生/子类化的第三方,则应将Label包装在另一个小部件中:一个简单的小部件,它使用鼠标事件并且只有一个子节点,即原始Label。

答案 1 :(得分:0)

如果标签是子窗口小部件,则是,标签将尝试吃掉事件,失败(通常标签没有处理程序方法),因此将事件传递回按钮。

最简单的方法是派生Label类的子类,并覆盖handle函数(假设这在您的工具包中是可行的 - 它应该在任何体面的工具包中)。然后,您可以使用句柄功能捕获鼠标单击,并将任何其他事件传递回按钮。

比较指针可能是一个坏主意,并且稍微依赖于工具包的实现方式 - 例如,它可能将源视为按钮(因为这是它所期望的),而不是标签。

虽然我觉得很奇怪Label本身就是一个小部件......