查看: 1277|回复: 0

Qt 与 OSG 结合 多点触触控

[复制链接]

该用户从未签到

发表于 2017-7-6 14:38:58 | 显示全部楼层 |阅读模式
讲osg嵌入Qt窗口中,QT窗口采用QGraphicsView  需要在qt的触屏事件 转换为osg事件进行处理 代码如下


       if(evType==QEvent::TouchBegin || evType == QEvent::TouchUpdate || evType == QEvent::TouchEnd )
       {

           QTouchEvent *touchEvent = static_cast<QTouchEvent *>(event);
           QList<QTouchEvent::TouchPoint> touchPoints = touchEvent->touchPoints();
           if (touchPoints.count() == 2) {

               const QTouchEvent::TouchPoint &touchPoint0 = touchPoints.first();
               const QTouchEvent::TouchPoint &touchPoint1 = touchPoints.last();
   

               if(touchEvent->touchPointStates() & Qt::TouchPointPressed)
               {
                   m_pGraphicsWindow->getEventQueue()->touchBegan(touchPoint0.id(),osgGA::GUIEventAdapter::TOUCH_BEGAN,
                                                                  touchPoint0.startPos().x(), touchPoint0.startPos().y());
                   m_pGraphicsWindow->getEventQueue()->touchBegan(touchPoint1.id(),osgGA::GUIEventAdapter::TOUCH_BEGAN,
                                                                  touchPoint1.startPos().x(), touchPoint1.startPos().y());

               }
               if(touchEvent->touchPointStates() & Qt::TouchPointMoved)
               {
                   m_pGraphicsWindow->getEventQueue()->touchEnded(touchPoint0.id(),osgGA::GUIEventAdapter::TOUCH_STATIONERY,
                                                                  touchPoint0.lastPos().x(), touchPoint0.lastPos().y(),2);
                   m_pGraphicsWindow->getEventQueue()->touchEnded(touchPoint1.id(),osgGA::GUIEventAdapter::TOUCH_STATIONERY,
                                                                  touchPoint1.lastPos().x(), touchPoint1.lastPos().y(),2);

               }
               if (touchEvent->touchPointStates() & Qt::TouchPointReleased) {



                    m_pGraphicsWindow->getEventQueue()->touchEnded(touchPoint0.id(),osgGA::GUIEventAdapter::TOUCH_ENDED,
                                                                   touchPoint0.lastPos().x(), touchPoint0.lastPos().y(),2);


                    m_pGraphicsWindow->getEventQueue()->touchEnded(touchPoint1.id(),osgGA::GUIEventAdapter::TOUCH_ENDED,
                                                                    touchPoint1.lastPos().x(), touchPoint1.lastPos().y(),2);
                   //如何转换为OSG的事件

               }

           }
           return true;


       }

现在的问题是touchBegan,touchMovede touchEnded 这些个参数到底得如何传才能正确的让osg操作子响应啊  目前使用的是地球操作子 是支持多点触控的  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表