qt 焦点捕获_Qt如何捕获键盘事件?

本文详细介绍了Qt中的键盘事件处理和焦点捕获机制。内容包括Qt事件系统中按键事件的规则,如何通过Tab键、点击或快捷键改变焦点,以及QLabel、QGroupBox、QTabBar的焦点处理。同时,讨论了focusPolicy属性的作用,如何重载keyPressEvent和keyReleaseEvent以响应按键,以及在没有焦点时的键盘消息处理。对于Tab键的特殊处理,需要重载event函数。
摘要由CSDN通过智能技术生成

FFIVE

您好,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而不是获得焦点的WidgetfocusPolicy一个QWidget获得焦点的方式受 focusPolicy 控制Qt::TabFocus通过Tab键获得焦点Qt::ClickFocus通过被单击获得焦点Qt::StrongFocus可通过上面两种方式获得焦点Qt::NoFocus不能通过上两种方式获得焦点(默认值),setFocus仍可使其获得焦点keypress和keyrelease首先,我们要是Widget获得焦点,一般设置focusPolicy。然后要对按键进行响应,我们只需要直接重载:keyPressEventkeyReleaseEvent注意:对我们不处理的事件,要调用父类的相应事件处理函数。如果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 函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值