查看: 3292|回复: 1

Qt中的组合键如何传入Osg?

[复制链接]

该用户从未签到

发表于 2009-5-29 16:21:50 | 显示全部楼层 |阅读模式
我在Qt中计算
int ctrl=event.modifiers()&Qt::CTRL;
如果ctrl!=0说明 按下了ctrl键.可是接下来怎么传递给OSG呢?

直接把GUIEventAdapter::GUIEventAdapter::MODKEY_CTRL和keyCode做&操作结果OSG漫游器检测不到.
漫游器内是如下检测的:
bool isCtrl=(GUIEventAdapter::MODKEY_CTRL&mode)!=0;

在不和Qt结合的时候 是可以接受到Ctrl的组合键的.

该用户从未签到

发表于 2009-5-30 07:49:34 | 显示全部楼层
给一段我自己的代码片断好了:
  1. void AdapterWidget::setKeyboardModifiers( QInputEvent* event )
  2. {
  3.     int modkey = event->modifiers() & (Qt::ShiftModifier | Qt::ControlModifier | Qt::AltModifier);
  4.     unsigned int mask = 0;
  5.     if ( modkey & Qt::ShiftModifier ) mask |= osgGA::GUIEventAdapter::MODKEY_SHIFT;
  6.     if ( modkey & Qt::ControlModifier ) mask |= osgGA::GUIEventAdapter::MODKEY_CTRL;
  7.     if ( modkey & Qt::AltModifier ) mask |= osgGA::GUIEventAdapter::MODKEY_ALT;
  8.     _gw->getEventQueue()->getCurrentEventState()->setModKeyMask( mask );
  9. }

  10. void AdapterWidget::keyPressEvent( QKeyEvent* event )
  11. {
  12.     setKeyboardModifiers( event );
  13.     _gw->getEventQueue()->keyPress( (osgGA::GUIEventAdapter::KeySymbol) *(event->text().toAscii().data()) );
  14. }

  15. void AdapterWidget::keyReleaseEvent( QKeyEvent* event )
  16. {
  17.     setKeyboardModifiers( event );
  18.     _gw->getEventQueue()->keyRelease( (osgGA::GUIEventAdapter::KeySymbol) *(event->text().toAscii().data()) );
  19. }

  20. ...
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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