正如我从Qt文档(QKeySequence
,Qt
全局命名空间)中理解的那样,我不能使用笔记本Fn
键作为快捷键修饰符。
Qt知道的唯一修饰符是:{ {1}},Shift
,Control
,Alt
。但没有Meta
!
但可能存在一些hacky方式?比如直接指定Fn
代码。
代码:
Fn
答案 0 :(得分:3)
首先,Fn
键不是经典修饰键。 (克里斯已经说过了。)
如果按下经典修饰键(Shift
,Control
,Alt
,Meta
),键盘会发送密钥代码。
操作系统处理此密钥代码并将其提供给相关的应用程序。
Fn
密钥很特别。一些制造商在键盘微控制器上处理它,这将在下面描述。还有一些其他人发送了Fn
密钥的经典密钥代码。
Fn
键如果系统处理键盘微控制器上的Fn
键:
您可以假设键盘内部有类似键和键码之间的转换表。如果保持Fn
键,则键盘使用另一个转换表。某些键具有相同的键代码,而其他键具有另一个键代码。 (这是现实的极其简化的模型,但是对于这个例子它可以工作。)
由于制造商不是以同样的方式实现Fn
密钥,因此没有适用于所有键盘的简单解决方案。
我认为应该可以将以下小型解决方案与一个大型解决方案结合起来。但我不会完全解决这个问题,我认为这并不是很奇特。
Fn
键在键盘微控制器上处理 如果在键盘微控制器上处理Fn
键:
处理键盘返回的密钥代码。例如,我的键盘在Fn
+ F1
VolumeMute
密钥代码上发送。这只有在两个表之间存在差异时才有效,如上所述。
如果您的解决方案无法使用所有设备,您只需尝试通过哪种组合键发出Qt Key。例如,在我的系统中,组合Fn
+ F1
就是这个Qt-Key:Qt::Key_VolumeMute
。
也可以在第一次启动时询问用户按此组合并保存密钥代码。 (QWidget::keyPressEvent与QKeyEvent::key)
组合使用Fn
是经典密钥 如果Fn
是经典密钥:
查找哪个Qt-Key是您的Fn
密钥。 (我不确定这一点,但我认为Fn
密钥是Qt::Key_F32
。但是你需要检查一下。有些键盘可能会返回另一个密钥代码。)
然后做这样的事情:Qt multiple key combo event。
理论上:可能会询问某些键盘是否实际按下Fn
键。 (在Linux系统上,这应该类似/proc/acpi/ibm/
或/sys/devices/platform/
。但这非常依赖于驱动程序。)