• 7324阅读
  • 6回复

[提问]请问qt做的软键盘上的焦点怎样能进行四个方向移动 [复制链接]

上一主题 下一主题
离线nmqway
 
只看楼主 倒序阅读 楼主  发表于: 2011-12-02
关键词: 焦点软键盘
小弟新手求助,写了个软键盘程序,想在上面捕获方向键按照自己方式进行焦点移动,而不是qt默认的焦点移动策略。
我添加了打印信息,编译通过运行时后台没有显示,而且软键盘上焦点还是像以前一样的移动,说明没捕获到,有谁知道怎么解决吗?谢谢啦!

文件中:
  bool event(QEvent *event);  
源文件中:
bool KeyboardWidget::event(QEvent *event)
{
      if (event->type() == QEvent::KeyPress) {
          QKeyEvent *ke = static_cast<QKeyEvent *>(event);
          if (ke->key() == Qt::Key_Up) {
         printf("Up is been pressed!\n");  
              return true;
         }

      }
      return QWidget::event(event);
}

离线wxj120bw

只看该作者 1楼 发表于: 2011-12-03
回 楼主(nmqway) 的帖子
最还在qapplication层对所要事件判断有没有
离线dbzhang800

只看该作者 2楼 发表于: 2011-12-04
理清一个概念,一个QWidget上面放置大量按钮。

接受键盘事件的是拥有焦点的按钮,而不是你这个QWidget。

或许可以看看这个:http://blog.csdn.net/dbzhang800/article/details/7038545
离线nmqway
只看该作者 3楼 发表于: 2011-12-05
回 1楼(wxj120bw) 的帖子
谢谢哈,不过我这软键盘是要封装起来在另一个浏览器的类中调用的,而qapplication层只初始化和显示浏览器,所以不能直接在qapplication层调用。
离线nmqway
只看该作者 4楼 发表于: 2011-12-05
回 2楼(dbzhang800) 的帖子
谢谢:)
嗯,应该是这个原因,但是怎么改好呢?对每个button进行事件判断?
按钮通过signalmapper进行信号连接,在keyboard类中循环构造出来的,每个按钮本身不是单独的类,怎样让每个按钮重载QObject::event()呢
离线nmqway
只看该作者 5楼 发表于: 2011-12-05
问题解决了,用eventFilter,然后对每个按钮button->installEventFilter(this);
this就是keyboard这个对象,只要在keyboard上有相应事件发生,botton都会响应。

现在剩下的问题就是怎么通过上下左右移动焦点了,原来焦点的移动只有向前和向后,现在需要四个方向的移动,而且是绝对位置的移动,比如说焦点在"G"这个键上,我按键盘的上焦点到“T”,按下焦点到“B”,按左焦点和Shift+Tab效果一样到“F”,按右和Tab效果一样到“H”,请问各位有没有知道怎么解决的,小弟困扰很多天了,望不吝赐教!
离线zhaohj5200

只看该作者 6楼 发表于: 2012-03-19
楼主解决了吗,希望帮帮忙啊
快速回复
限100 字节
 
上一个 下一个