如果这是一个模糊的问题,没有正确的答案,请道歉。如果不在正确的位置,请移动/关闭它。
我在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以外的工具包粘贴类似的代码。)
最后,在许多mousepresessevent和mousereleaseevent处理程序中使用类似的if/else/switch代码,这看起来有点笨拙,所以我尝试通过将对象放入不同的“模式”来封装一些重复,具体取决于关闭了哪些修饰符。尽管如此,我还是觉得我错过了一些优雅的解决方案。我试过查看各种开源工具的代码,但没有发现任何有形的(呃,简单)足以让我指向不同的方向。
一些工具(比如,gimp)似乎有很多丰富多样的依赖于工具和修改器的行为,我觉得应该有一种很好的方法来构建这个模式。如有任何建议,将不胜感激。