我需要一些关于什么是通用鼠标的“理想”设计模式的意见
相互作用。
这里是简化的问题。我有一个小型 3d 程序(QT 和 openGL)并且
我使用鼠标进行交互。每一次互动通常不仅仅是一次
单个函数调用,主要由最多 3 个函数调用(启动、执行、终结)执行。
例如,相机旋转:这里初始函数调用将传递当前第一个鼠标位置,
而执行的函数调用将更新相机等。
但是,对于仅几个交互,请对它们进行硬编码(在 MousePressEvent、MouseReleaseEvent、MouseMoveEvent 或 MouseWheelEvent 等内部)
没什么大不了的,但如果我考虑一个更高级的程序(例如 20 次或更多交互),那么就需要适当的设计。
因此,你将如何在QT内部设计这样的交互。
我希望我的问题足够清楚,否则不要抱怨:-)
Thanks
我建议使用多态性和工厂方法模式。这是一个例子:
在我的 Qt 程序中,我有带有 mousePressEvent、mouseMoveEvent 和 mouseReleaseEvent 的 QGraphicsScenes 和 QGraphicsItems,如下所示:
void CustomItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
// call factory method, which returns a subclass depending on where click occurred
dragHandler = DragHandler::createDragHandler(event /* and other relevant stuff */);
}
void CustomItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
dragHandler->onMouseMove(event);
}
void CustomItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
dragHandler->onMouseRelease(event);
delete dragHandler;
}
这种特殊情况下的想法是,根据我单击 CustomItem 的位置,鼠标按下、移动和释放将具有不同的功能。例如,如果我单击项目的边缘,拖动将调整其大小,但如果我单击项目的中间,拖动将移动它。 DragHandler::onMouseMove 和 DragHandler::onMouseRelease 是由子类重新实现的虚拟函数,以根据鼠标按下发生的位置提供我想要的特定功能。不需要 DragHandler::onMousePress 因为它基本上是构造函数。
这当然是一个相当具体的示例,可能不完全是您想要的,但它让您了解如何使用多态性来清理鼠标处理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)