• 5231阅读
  • 4回复

[提问]怎么用事件过滤器获取键盘上的Up键、Down键、Right键、Left键 [复制链接]

上一主题 下一主题
离线9错过了3
 

只看楼主 倒序阅读 楼主  发表于: 2015-07-10
void GameMap::keyPressEvent(QKeyEvent* event)
{
  if(event->key() == Qt::Key_W)
     turns=1;
if(event->key() == Qt::Key_S)
   turns =-1;
  if(event->key() == Qt::Key_A)
   turns = -2;  
  if(event->key() == Qt::Key_D)
   turns = 2;  
  QDialog::keyPressEvent(event);
}

这样可以获取键盘上的W、S、A、D键
//////////////////////////////////////////////////////////////////////////////////////////////////////
但是以下代码不能获取键盘上的Up、Down、Right、Left键  为什么???求大神指教,我是白到不能再白的小白,wuwuwu~~~万分感谢!!!!
void GameMap::keyPressEvent(QKeyEvent* event)
{
  if(event->key() == Qt::Key_Up)
    turns=1;
if(event->key() == Qt::Key_Down)
   turns =-1;
  if(event->key() == Qt::Key_Left)
   turns = -2;  
  if(event->key() == Qt::Key_Right)
   turns = 2;  
  QDialog::keyPressEvent(event);
}
  
希望能附上修改的代码~~~~我查了资料,用事件过滤器,但是我不知道该怎么用!!!
离线yfx2003

只看该作者 1楼 发表于: 2015-09-18
www.qtcn.org/gpq4/
ajaxref.okajax.com/
离线刘子龙

只看该作者 2楼 发表于: 2017-09-05
加一个函数setFocusPolicy(Qt::WheelFocus);
离线hpplel

只看该作者 3楼 发表于: 2018-05-10
书上说的明白,keyPressEvent有个缺点,需要对不同类型的窗口部件都要一一子类化,才能让他们实现相同的行为。


你可能在没有子类化的窗口上,所以点击没反应。

事件过滤器,QT文档里说的很清楚了。。。
在qt帮助里,搜索installEventFilter(QObject *filterObj),写的很清楚

离线笑颜

只看该作者 4楼 发表于: 2018-05-11
回 hpplel 的帖子
hpplel:书上说的明白,keyPressEvent有个缺点,需要对不同类型的窗口部件都要一一子类化,才能让他们实现相同的行为。
你可能在没有子类化的窗口上,所以点击没反应。
....... (2018-05-10 10:21) 

难道你不知道有个全局的事件过滤器? 给qApp安装事件过滤器?
快速回复
限100 字节
 
上一个 下一个