gpt4 book ai didi

qt - 鼠标交互的设计模式

转载 作者:行者123 更新时间:2023-12-04 18:34:50 26 4
gpt4 key购买 nike

我需要一些关于一般鼠标的“理想”设计模式的意见互动。

这里是简化的问题。我有一个小型 3d 程序(QT 和 openGL)和我使用鼠标进行交互。每一次互动通常不仅是单个函数调用,它主要由最多 3 个函数调用(启动、执行、完成)执行。例如,相机旋转:这里初始函数调用将传递当前第一个鼠标位置,而执行函数调用将更新相机等。

但是,仅针对几个交互,对这些进行硬编码(在 MousePressEvent、MouseReleaseEvent MouseMoveEvent 或 MouseWheelEvent 等内部)没什么大不了的,但如果我考虑更高级的程序(例如 20 次或更多交互),则需要适当的设计。

因此,您将如何在 QT 中设计这样的交互。

我希望我把我的问题说得足够清楚,否则不要提示:-)

谢谢

最佳答案

我建议使用多态和工厂方法模式。这是一个例子:

在我的 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,因为它基本上就是构造函数。

这当然是一个相当具体的示例,可能不是您想要的,但它让您了解如何使用多态性来清理鼠标处理。

关于qt - 鼠标交互的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10128200/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com