• 6548阅读
  • 1回复

QtJambi中检测组合键 [复制链接]

上一主题 下一主题
离线lazybone
 
只看楼主 正序阅读 楼主  发表于: 2008-11-28
— 本帖被 XChinux 执行加亮操作(2008-11-30) —
(或许还有更好的方法,欢迎指出)
QKeySequence 里好像只能检测特殊的组合键,如带有Ctrl、shift组合之类,而对与普通的组合键,好像无法判断,关于取消按键重复的问题,参考了http://www.qtcn.org/bbs/read.php?tid=13530&keyword=key.

  1.                     boolean upPressed = false;
  2.     boolean downPressed = false;
  3.     boolean leftPressed = false;
  4.     boolean rightPressed = false;
  5.     public void keyPressEvent(QKeyEvent e) {
  6.         checkKeys();
  7.         if (e.isAutoRepeat()) {
  8.             e.ignore();
  9.             return;
  10.         } else {
  11.             if (e.key() == Qt.Key.Key_Up.value())
  12.                 upPressed = true;
  13.             if (e.key() == Qt.Key.Key_Down.value())
  14.                 downPressed = true;
  15.             if (e.key() == Qt.Key.Key_Left.value())
  16.                 leftPressed = true;
  17.             if (e.key() == Qt.Key.Key_Right.value())
  18.                 rightPressed = true;
  19.         }
  20.     }
  21.     public void keyReleaseEvent(QKeyEvent e) {
  22.         if (e.isAutoRepeat()) {
  23.             e.ignore();
  24.             return;
  25.         } else {
  26.             if (e.key() == Qt.Key.Key_Up.value())
  27.                 upPressed = false;
  28.             if (e.key() == Qt.Key.Key_Down.value())
  29.                 downPressed = false;
  30.             if (e.key() == Qt.Key.Key_Left.value())
  31.                 upPressed = false;
  32.             if (e.key() == Qt.Key.Key_Right.value())
  33.                 downPressed = false;
  34.         }
  35.     }
  36.     void checkKeys() {
  37.         if (upPressed && leftPressed)
  38.             System.out.println("左上");
  39.         if (upPressed && rightPressed)
  40.             System.out.println("右上");
  41.         if (downPressed && leftPressed)
  42.             System.out.println("左下");
  43.         if (downPressed && rightPressed)
  44.             System.out.println("右下");
  45.     }

大家可以访问我的小站[签名处],以示鼓励 哈哈:)
离线maxpayne
只看该作者 1楼 发表于: 2008-12-08
谢谢你了,感动ing。我一直觉得不管是在windows还是其他系统下的编辑器中,如果按下一个键不放,比如方向键,光标会先动一格,然后停一下,才持续移动,我一直被那个“停一下”困扰,你用的 e.ignore()给了我很大的提示,我再试试看。真是谢谢你了!
快速回复
限100 字节
 
上一个 下一个