- 在../qtOgitor/src/ogrewidget.cpp中定义的void OgreWidget::mouseMoveEvent(QMouseEvent *evt)
- 代码如下:
1: void OgreWidget::mouseMoveEvent(QMouseEvent *evt)
2: {
3: if(!OgitorsRoot::getSingletonPtr()->IsSceneLoaded())
4: return;
5:
6: if(!hasFocus())
7: setFocus();
8:
9: Ogre::Vector2 pos(evt->x(), evt->y());
10:
11: OgitorsRoot::getSingletonPtr()->OnMouseMove(pos, getMouseButtons(evt->buttons(), evt->button()));
12:
13: OgreWidgetMouseMovedSincePress = true;
14: }
-
- 在第11行调用的OgitorsRoot::getSingletonPtr()->OnMouseMove(pos, getMouseButtons(evt->buttons(), evt->button()));
- 将坐标传递给OnMouseMove
- 在../Ogitor/src/OgitorsRootUtilityFunctions.cpp中定义的
- void OgitorsRoot::OnMouseMove (Ogre::Vector2 point, unsigned int buttons)
- point为鼠标在视口的坐标用(x,y)表示,坐标原点在左上角。
1: void OgitorsRoot::OnMouseMove (Ogre::Vector2 point, unsigned int buttons)
2: {
3: if(!mActiveViewport)
4: return;
5: Ogre::Vector4 rect;
6: mActiveViewport->getRect(rect);
7:
8: if((rect.x <= point.x) && (rect.y <= point.y) && ((rect.x + rect.z) >= point.x) && ((rect.y + rect.w) >= point.y))
9: {
10: if(mMouseListener)
11: mMouseListener->OnMouseMove(mActiveViewport, point - Ogre::Vector2(rect.x,rect.y), buttons);
12: else
13: mActiveViewport->OnMouseMove(point - Ogre::Vector2(rect.x,rect.y), buttons);
14: }
15: else
16: {
17: if(mMouseListener)
18: mMouseListener->OnMouseLeave(mActiveViewport, point - Ogre::Vector2(rect.x,rect.y), buttons);
19: else
20: mActiveViewport->OnMouseLeave(point - Ogre::Vector2(rect.x,rect.y), buttons);
21: }
22: }
如图所示:
仅当加载有场景时才会调用OnMouseMove,并实时更新point 的值。OnMouseMove (Ogre::Vector2 point, unsigned int buttons)其中的 buttons 的值由getMouseButtons(evt->buttons(), evt->button())传递过来;判断鼠标按键对应值如下:
OMB_LEFT = 1, /** Left mouse button type */
OMB_RIGHT = 2, /** Right mouse button type */
OMB_MIDDLE = 4 /** Middle mouse button type */
在../qtOgitor/src/ogrewidget.cpp中
1: unsigned int OgreWidget::getMouseButtons(Qt::MouseButtons buttons, Qt::MouseButton button)
2: {
3: unsigned int flags = 0;
4: buttons |= button;
5:
6: if(buttons.testFlag(Qt::LeftButton))
7: flags |= OMB_LEFT;
8: if(buttons.testFlag(Qt::RightButton))
9: flags |= OMB_RIGHT;
10: if(buttons.testFlag(Qt::MidButton))
11: flags |= OMB_MIDDLE;
12:
13: return flags;
14: }
在../Ogitor/include/OgitorsDefinitions.h中
1: /** Ogitor mouse button enumeration */
2: enum OgitorsMouseButtons
3: {
4: OMB_LEFT = 1, /** Left mouse button type */
5: OMB_RIGHT = 2, /** Right mouse button type */
6: OMB_MIDDLE = 4 /** Middle mouse button type */
7: };