查看完整版本: [-- 怎么用事件过滤器获取键盘上的Up键、Down键、Right键、Left键 --]

QTCN开发网 -> 《C++ GUI Qt 4编程》(第2版)专栏 -> 怎么用事件过滤器获取键盘上的Up键、Down键、Right键、Left键 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

9错过了3 2015-07-10 14:54

怎么用事件过滤器获取键盘上的Up键、Down键、Right键、Left键

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 2015-09-18 18:25
http://blog.qt.io/blog/2014/07/03/qt-virtual-keyboard-1-1/

Qt Virtual Keyboard

刘子龙 2017-09-05 13:48
加一个函数setFocusPolicy(Qt::WheelFocus);

hpplel 2018-05-10 10:21
书上说的明白,keyPressEvent有个缺点,需要对不同类型的窗口部件都要一一子类化,才能让他们实现相同的行为。


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

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


笑颜 2018-05-11 18:19
hpplel:书上说的明白,keyPressEvent有个缺点,需要对不同类型的窗口部件都要一一子类化,才能让他们实现相同的行为。
你可能在没有子类化的窗口上,所以点击没反应。
....... (2018-05-10 10:21) 

难道你不知道有个全局的事件过滤器? 给qApp安装事件过滤器?


查看完整版本: [-- 怎么用事件过滤器获取键盘上的Up键、Down键、Right键、Left键 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled