道歉,如果这是一个模糊的问题,没有正确的答案。如果它不在正确的位置,请移动/关闭它。设计:处理依赖于修饰符的鼠标事件
我已经写在wxWidgets中和Qt一些比较琐碎的图形用户界面,我坚持不知道该如何处理建筑下列情况:
- 你逮住一只耗子事件做一些事来一个图形对象在你的GUI
- 你与对象怎么做,取决于其修饰键用户按住
一开始我通常做类似如下:
void MyClass::mouseMoveEvent(QGraphicsSceneMouseEvent* event)
{
if (event->modifiers() & Qt::AltModifier) {
// do something
} else if (event->modifiers() & Qt::ControlModifier) {
// do something else
} else {
// do yet another thing
}
}
// Repreat ad-nausium for other mouse click/move events...
(这是一个普遍的问题,我可以贴上类似的代码比Qt的其他工具包。)
最后,与同类如果大量mousePressEvent,mouseReleaseEvent处理程序/其它/开关的代码,这似乎有点笨拙,所以我尝试并通过将对象放入不同的“模式”来取决于哪些修饰符关闭来封装一些重复。尽管如此,我仍然觉得我错过了一些不错的优雅解决方案。我试图查看各种开源工具的代码,但我没有发现任何有形的(呃,简单的)足以让我指向不同的方向。一些工具(比如说GIMP)似乎有许多丰富多样的依赖于工具和修饰符的行为,我认为这是构建这种模式的一种不错的方式。任何建议将受到感谢。
@加布里埃尔:感谢您的意见,它给了我一些想法。正如你所建议的,定义一个链式责任类型的处理程序似乎是管理这里各种排列的好方法。我会做更多的阅读,并尝试找出一种在我想象的背景下实现它的好方法。 – Mikesname 2010-03-08 23:02:14