C++ 如何创建类似“QKeySequence”的QKeySequence;Fn“+;钥匙
C++ 如何创建类似“QKeySequence”的QKeySequence;Fn“+;钥匙,c++,qt,keyboard-shortcuts,C++,Qt,Keyboard Shortcuts,正如我从Qt文档(QKeySequence,Qt全局名称空间)中了解到的,我不能使用notebookFn键作为快捷方式修饰符。Qt知道的唯一修饰符是:Shift,Control,Alt,Meta。但是没有Fn 但可能存在某种骇客方式吗?类似于直接指定Fn代码 代码: 首先,Fn键不是经典的修改键。(克里斯已经说过了。) 一些背景 如果按下经典修改键(Shift,Control,Alt,Meta),键盘将发送一个键代码。 操作系统处理此关键代码并将其提供给相关应用程序 Fn键是特殊的。一些制造商在
正如我从Qt文档(
QKeySequence
,Qt
全局名称空间)中了解到的,我不能使用notebookFn
键作为快捷方式修饰符。Qt知道的唯一修饰符是:
Shift
,Control
,Alt
,Meta
。但是没有Fn
但可能存在某种骇客方式吗?类似于直接指定
Fn
代码
代码:
首先,
Fn
键不是经典的修改键。(克里斯已经说过了。)
一些背景
如果按下经典修改键(Shift
,Control
,Alt
,Meta
),键盘将发送一个键代码。
操作系统处理此关键代码并将其提供给相关应用程序
Fn
键是特殊的。一些制造商在键盘微控制器上处理它,下面对此进行描述。而另一些则为Fn
键发送一个经典键代码
系统处理键盘微控制器上的Fn
键
如果系统处理键盘微控制器上的Fn
键:
您可以假设键盘在键和键代码之间有内部类似于翻译表的内容。如果按住Fn
键,键盘将使用另一个翻译表。有些钥匙有相同的钥匙代码,有些钥匙有另一个钥匙代码。(这是一个极其简化的现实模型,但在本例中它是有效的。)
解决
由于制造商实现Fn
键的方式不尽相同,因此没有简单的解决方案可以适用于所有键盘。
我认为应该可以将以下小的解决方案结合到一个大的解决方案中。但我不会完全解决这个问题,我认为这不是真正的幻想
Fn
键在键盘微控制器上操作
如果在键盘微控制器上操作Fn
键:
处理键盘返回的按键代码。例如,我的键盘在Fn
+F1
上发送VolumeMute
键代码。这仅在两个表之间存在差异时有效,如上所述
如果您的解决方案不能在所有设备上运行,您可以简单地尝试由什么组合键发出什么Qt键。例如,在我的系统上,组合Fn
+F1
就是这个Qt键:Qt::Key\u VolumeMute
也可以在首次启动时要求用户按此组合并保存钥匙代码。(结合)
Fn
是一把经典钥匙
如果Fn
是一个经典键:
查找哪个Qt键是您的Fn
键。(我对此不确定,但我认为Fn
键是Qt::key_F32
。但您需要检查一下。可能有些键盘返回另一个键代码。)
然后像这样做:
基于驱动程序
理论上:某些键盘可能会询问是否实际按下了
Fn
键。(在Linux系统上,这应该类似于/proc/acpi/ibm/
或/sys/devices/platform/
。但这非常依赖于驱动程序。)Fn对键盘非常特殊,通常无法读取或模拟。因此,您认为在我的情况下,这项任务是不可能的?无论您最终尝试做什么,都是可能的,但我怀疑Qt是否会这样。否则它有多容易取决于制造商是否打算让您能够以编程方式使用该键。因此,简短的回答是“不,您不能”:)谢谢您的详细解释!
m_actionGoToFirstPage->setShortcut( QKeySequence( Qt::Key_Up /*| Qt::Fn ???*/ ) );