Qt键盘事件

转载 2012年03月29日 16:00:00

注意:如果你需要的全局热键:请移步:Qt 全局热键 QxtGlobalShortcut 分析与使用举例

Qt键盘事件属于Qt事件系统,所以事件系统中所有规则对按键事件都有效。下面关注点在按键特有的部分:

focus

一个拥有焦点(focus)的QWidget才可以接受键盘事件。有输入焦点的窗口是活动窗口或活动窗口子窗口或子子窗口等。

焦点移动的方式有以下几种:

  • 按下Tab或Shift+Tab
    • 注意:文本编译器(一般需要插入Tab),或者WebView(需要Tab来移动超链接焦点) 等

    • Qt中,需要输入Tab的地方可以用 Ctrl+Tab 或 Ctrl+Shift+Tab 替代。
  • 点击一个QWidget
    • 建议:只对接受文本输入的Widget启用该功能
  • 按下键盘的快捷键
    • QLabel::setBuddy(), QGroupBox,以及 QTabBar 支持
  • 使用鼠标滚轮
  • 用户移动焦点
    • 程序将决定被设置focus的Widget的哪一个子Widget获得焦点

注意:如果一个 Widget 已经 grabKeyboard,所有键盘事件将发送到该Widget而不是获得焦点的Widget

focusPolicy

一个QWidget获得焦点的方式受 focusPolicy 控制

Qt::TabFocus
通过Tab键获得焦点
Qt::ClickFocus
通过被单击获得焦点
Qt::StrongFocus
可通过上面两种方式获得焦点
Qt::NoFocus
不能通过上两种方式获得焦点(默认值),setFocus仍可使其获得焦点

keypress和keyrelease

首先,我们要是Widget获得焦点,一般设置focusPolicy。

然后要对按键进行响应,我们只需要直接重载:

  • keyPressEvent
  • keyReleaseEvent

注意:

  • 对我们不处理的事件,要调用父类的相应事件处理函数。
  • 如果widget当前没有焦点,考虑到事件转发:如果其子widget有焦点,那么该widget未处理的键盘事件将被转发过来。
  • 有时输入焦点不在任何窗口中。这种情况发生在所有程序都是最小化的时候。这时,Windows将继续向活动窗口发送键盘消息,但是这些消息与发送给非最小化的活动窗口的键盘消息有不同的形式。

QKeyEvent

在windows下,与键盘事件有关的有8个消息:

  • 对产生可显示字符的按键组合,Windows不仅给程序发送按键消息,而且还发送字符消息
  • 有些键不产生字符,这些键包括shift键、功能键、光标移动键和特殊字符键如Insert和Delete。对于这些键,Windows只产生按键消息。

这些消息在Qt中只体现在QKeyEvent中。

  • 对字符,可通过 QKeyEvent::text() 获得
  • 其他键,QKeyEvent::key() 获得一个键值

event函数

由于 Tab 键被用来切换焦点,这使得它与众不同。

这是qwidget.cpp的event函数中的代码片段:

case QEvent::KeyPress:
{   
    QKeyEvent *k = (QKeyEvent *)event;   
    bool res = false;
    if (!(k->modifiers() & (Qt::ControlModifier | Qt::AltModifier)))
   {  //### Add MetaModifier? 
       if (k->key() == Qt::Key_Backtab || (k->key() == Qt::Key_Tab && (k->modifiers() & Qt::ShiftModifier)))
           res = focusNextPrevChild(false);
       else if (k->key() == Qt::Key_Tab)
           res = focusNextPrevChild(true);
      if (res)
          break;
   }
   keyPressEvent(k); 
}

如果我们需要处理Tab键,需要重载 event 函数。

相关文章推荐

QT4的键盘事件

QT4的键盘事件            在Qt中,一个事件是QEvent的子类的对象。Qt能够处理上百种类型的事件,每一类型的事件由一个枚举值确定。例如,对鼠标点击事件,QEve...

Qt键盘事件

http://hi.baidu.com/767571039/blog/item/159d9f1458b4a403dc540150.html 注意:如果你需要的全局热键:请移步:Qt 全局热键 Qxt...

Qt键盘事件

Qt键盘事件属于Qt事件系统,所以事件系统中所有规则对按键事件都有效。下面关注点在按键特有的部分: focus 一个拥有焦点(focus)的QWidget才可以接受键盘事件。有输入焦点的窗...

Qt键盘事件

注意:如果你需要的全局热键:请移步:Qt 全局热键 QxtGlobalShortcut 分析与使用举例 Qt键盘事件属于Qt事件系统,所以事件系统中所有规则对按键事件都有效。下面关注点在按键特有的部...

QT基础(二)----鼠标、键盘事件处理机制、信息拦截机制

鼠标、键盘事件处理机制

QT5 OpenGL (六, 键盘事件, 开关灯,放大缩小综合运用)

概要 实例效果图 立体图放大图 立体图缩小图 不加矢量开灯图 不加矢量关灯图 加矢量关灯图1 加矢量关灯图2 部分代码展示 主要内容解析 QT键盘事件 立体图形的放大和缩小 上下左右键以及A键D争键控...

Qt中的键盘事件以及焦点设置

Qt键盘事件属于Qt事件系统,所以事件系统中所有规则对按键事件都有效。下面关注点在按键特有的部分: focus 一个拥有焦点(focus)的QWidget才可以接受键盘事件。有输入焦点的窗...

Qt键盘事件

Qt键盘事件 注意:如果你需要的全局热键:请移步:Qt 全局热键 QxtGlobalShortcut 分析与使用举例 Qt键盘事件属于Qt事件系统,所以事件系统中所有规则对按键事件都有效。下面...

Qt5.5 SDL2.0 鼠标事件,键盘事件,BMP图片加载

1Q5.5 +SDL环境搭建1.1pro 文件配置TEMPLATE = app CONFIG += console CONFIG -= app_bundle CONFIG -= qtSOURCES +...

QT事件处理,鼠标事件,按键键盘事件,定时器,进度条。

本篇博客是博主原创请尊重,博主,转载需要加上转载地址和转载连接
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)