• 9874阅读
  • 12回复

帮助,关于键盘响应问题,谢谢了 [复制链接]

上一主题 下一主题
离线左岸右转
 
只看楼主 倒序阅读 楼主  发表于: 2006-04-28
我在坐一个界面里,窗口捕获焦点事件。如按向上键后,处理一些程序。这样响应是实现了,但是我想在处理响应程序的时候把键盘响应先关了(也就是在处理程序时再按键盘是无效的),等程序处理完后再打开键盘响应。在进行处理程序前我加了releaseKeyboard ()腿出处理程序后我再加grabKeyboard (),可是在处理程序的时候,键盘却仍然可以响应。这是为什么了,有哪位高手知道可以让键盘不发生响应的指令吗,谢谢了,小弟是位新手,找了很多资料都没有找到。急
[ 此贴被XChinux在2006-05-08 00:17重新编辑 ]
离线shiroki

只看该作者 1楼 发表于: 2006-04-28
我感觉不想响应的时候应该grabkeyboard, 但所有事件都不处理。 不知道为什么不想响应的时候要调releasekeyboard呢? release之后事件就按照正常的路线走了, 始终会传给focus widget的
--
shiro is White
ki is tree
http://www.cuteqt.com
论坛 http://www.cuteqt.com/bbs
博客 http://www.cuteqt.com/blog
博客镜像: http://sites.cuteqt.com/cuteqt
Linux/Qt/嵌入式讨论群 http://qun.qq.com/air/5699823
离线左岸右转
只看该作者 2楼 发表于: 2006-04-28
grabKeyboard () 捕获键盘输入。而releaseKeyboard () 是释放键盘捕获。不想要响应键盘输入的时候不是用releaseKeyboard 吗,难道这理解错了,刚好反了,再试试看,呵,我调了一上午了还是不行,呵。希望这下可以。
离线左岸右转
只看该作者 3楼 发表于: 2006-04-28
刚开始我的程序是这样写的,键盘第一次响应后进入。处理里面的程序后,用releaseKeyboard (); 释放键盘后,以后再按Key_Up 就不会再响应键盘程序了,可是写次按Key_Up 后还是会继续响应是什么了。

void Form1_Ch1::keyPressEvent ( QKeyEvent * event )
{
      if(event->key()==Qt::Key_Up )/
   {
      releaseKeyboard ();      
      if (teamflag>1)
        teamflag--;
      else
      teamflag=20;
     
      printf("%d\n",xx++);//测试
      update();
         }



刚才shiroki说是用grabKeyboard (); 才会不响应,所以我改成
void Form1_Ch1::keyPressEvent ( QKeyEvent * event )
{
      if(event->key()==Qt::Key_Up )/
   {
      grabKeyboard ();    
      if (teamflag>1)
        teamflag--;
      else
      teamflag=20;
     
      printf("%d\n",xx++);//测试
      update();
         }

但进入一次之后,按Key_Up 还是会继续响应的;希望哪个朋友知道的可否告知一下,项目急着要出来,谢谢了。
离线左岸右转
只看该作者 4楼 发表于: 2006-04-28
哪位知道的告知一下吧,谢谢了
离线dotnetjack
只看该作者 5楼 发表于: 2006-04-29
Qt/Embedded提供了事件过滤器(key event filter)的接口,在键盘点击事件从QWSServer截获并发送到相应的client之前会经过函数QWSServer::KeyboardFilter。
离线左岸右转
只看该作者 6楼 发表于: 2006-04-29
引用第5楼dotnetjack2006-04-29 11:02发表的“”:
Qt/Embedded提供了事件过滤器(key event filter)的接口,在键盘点击事件从QWSServer截获并发送到相应的client之前会经过函数QWSServer::KeyboardFilter。

那要怎么样才能让键盘想响应的时候就它响应,不想让键盘响应的时候就不响应了,要做哪一些设置,或用到哪一些函数了。谢谢了。
离线左岸右转
只看该作者 7楼 发表于: 2006-04-29
我的MSN:a_sam218@hotmail.com或QQ52582704有懂的吗,可以加我一下,:)
离线dotnetjack
只看该作者 8楼 发表于: 2006-04-29
You can do what you want to do in that filter message functions, for example, you can make some flags.
离线dotnetjack
只看该作者 9楼 发表于: 2006-04-29
It is a very extravagant idea to chat with msn, I even cannot use it in working time.
离线shiroki

只看该作者 10楼 发表于: 2006-04-29
Hi

刚才shiroki说是用grabKeyboard (); 才会不响应,所以我改成
void Form1_Ch1::keyPressEvent ( QKeyEvent * event )
{
    if(event->key()==Qt::Key_Up )/
  {
    grabKeyboard ();  
    if (teamflag>1)
    teamflag--;
    else
    teamflag=20;
 
    printf("%d\n",xx++);//测试
    update();
      }

但进入一次之后,按Key_Up 还是会继续响应的;希望哪个朋友知道的可否告知一下,项目急着要出来,谢谢了


我说的好像不是这个意思吧
我的意思是在你能接收到key消息的时候你只要不去处理它不就不会响应了吗
而且我觉得应该是你即使不调用grabkeyboard你的form应该也会收到 keypress的事件吧? 如果这样的话即使release掉也没用,还是会收到的

你可以在这个响应函数里加一个static的flag, 第一次进去之后把它设成true, 后面判断这个flag,就不要再执行你的处理代码了。
--
shiro is White
ki is tree
http://www.cuteqt.com
论坛 http://www.cuteqt.com/bbs
博客 http://www.cuteqt.com/blog
博客镜像: http://sites.cuteqt.com/cuteqt
Linux/Qt/嵌入式讨论群 http://qun.qq.com/air/5699823
离线左岸右转
只看该作者 11楼 发表于: 2006-04-29
呵呵,谢谢,我今天继续试试看,希望可以
离线zccmin
只看该作者 12楼 发表于: 2006-04-30
我有一个建议:你不用键盘响应事件做,而改用加速键做会很好处理你的情况。
具体用法你看看 QACCEL类。
快速回复
限100 字节
 
上一个 下一个