写了一个键盘响应,按下所有字母键盘,获取的按键key值都是229(0xE5)。
class UseEventHandler :public osgGA::GUIEventHandler
{
public:
UseEventHandler(){}
virtual bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa)
{
osgViewer::Viewer* viewer = dynamic_cast<osgViewer::Viewer*>(&aa);
if (!viewer)return false;
switch (ea.getEventType())
{
case(osgGA::GUIEventAdapter::KEYDOWN):
{
if (ea.getKey()==107 || ea.getKey()==229)
{
qDebug()<<"hello:"<<ea.getKey();
return false;
}
}
}
}
翻看定义,只有一个符合,明显不对。
osgGA/GUIEventAdapter
class OSGGA_EXPORT GUIEventAdapter : public Event
{
enum KeySymbol
{
KEY_Caps_Lock = 0xFFE5, /* Caps lock */
}
}
下面是答案

在osg中遇到所有按键key值显示为229(0xE5)的异常,经研究发现,这是由于在中文输入法下,keydown事件获取的大部分按键ASCII码值都是229。解决方案是改用keyup事件,以正确获取键盘keyCode值,避免输入法的影响。
最低0.47元/天 解锁文章
5692

被折叠的 条评论
为什么被折叠?



