首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何创建类似于"Fn“+ QKeySequence的Key_Up

如何创建类似于"Fn“+ QKeySequence的Key_Up
EN

Stack Overflow用户
提问于 2015-04-08 14:29:10
回答 1查看 1.2K关注 0票数 2

正如我从Qt文档(QKeySequenceQt全局命名空间)中了解到的,我不能使用笔记本Fn键作为快捷修饰符。

Qt知道的唯一修饰符是:ShiftControlAltMeta。但是没有Fn

但可能存在某种讨厌的方式吗?比如直接指定Fn代码。

代码:

代码语言:javascript
复制
m_actionGoToFirstPage->setShortcut( QKeySequence( Qt::Key_Up /*| Qt::Fn ???*/ ) );
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-09 01:07:45

首先,Fn键不是一个经典的修饰符键。(克里斯已经说过了。)

一些背景

如果按下一个经典的修饰符键(ShiftControlAltMeta),键盘就会发送一个键代码。操作系统处理这个密钥代码并将其交给相关的应用程序。

Fn密钥是特殊的。一些厂家在键盘微控制器上处理它,这是下面描述的。还有一些人为Fn密钥发送了一个经典的密钥代码。

键盘微控制器上的Fn键处理

如果系统在键盘微控制器上处理Fn键:

您可以假设键盘内部有类似于键和键代码之间的转换表。如果保持Fn键,键盘将使用另一个转换表。一些密钥具有相同的密钥代码,另一些密钥具有另一个密钥代码。(这是非常简化的现实模型,但对于本例来说,它是有效的。)

解决方案

由于制造商以不完全相同的方式实现Fn密钥,所以没有在所有键盘上工作的简单解决方案。我认为应该有可能将以下小的解决方案合并成一个大的解决方案。但我不会完全解决这个问题,我认为这并不是真正的幻想。

Fn键在键盘微控制器上处理。

如果在键盘微控制器上处理Fn 键:处理键盘返回的键代码。例如,我的键盘在Fn + F1上发送VolumeMute键代码。只有当两个表之间存在差异时,这才会起作用,上文对此作了解释。

如果您的解决方案不能工作所有的设备,您可以简单地尝试什么Qt键是由什么键组合发出。例如,在我的系统中,Fn + F1的组合是Qt键:Qt::Key_VolumeMute

也可以要求用户在第一次开始按此组合并保存密钥代码。( QWidget::keyPressEventQKeyEvent::key相结合)

Fn是一个经典的密钥

If 是一个经典的键:查找哪个Qt键是您的Fn键。(我不确定这一点,但我认为Fn密钥是Qt::Key_F32。但你得检查一下这个。一些键盘有可能返回另一个密钥代码。)然后做这样的事情:Qt多键组合事件

驱动程序

理论上:可以问一些键盘是否实际按下了Fn键。(在Linux系统上,这应该类似于/proc/acpi/ibm//sys/devices/platform/。但这是非常依赖司机的。)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29517583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档