era*_*lan 2 c++ qt keyboard-shortcuts
正如我从 Qt 文档(QKeySequence,Qt全局命名空间)中了解到的,我不能使用 notebookFn键作为快捷方式修饰符。
Qt 知道的唯一修饰符是:Shift, Control, Alt, Meta。但是没有Fn!
但可能存在一些hacky方式?比如Fn直接指定代码。
代码:
m_actionGoToFirstPage->setShortcut( QKeySequence( Qt::Key_Up /*| Qt::Fn ???*/ ) );
Run Code Online (Sandbox Code Playgroud)
小智 5
首先,该Fn键不是经典的修饰键。(克里斯已经说过了。)
如果按下经典修饰键 ( Shift, Control, Alt, Meta),键盘会发送一个键码。操作系统处理此密钥代码并将其提供给相关应用程序。
在Fn关键的是特殊的。一些制造商在键盘微控制器上处理它,如下所述。其他一些发送密钥的经典密钥代码Fn。
Fn键盘微控制器上的按键如果系统处理Fn键盘微控制器上的按键:
您可以假设键盘内部具有键和键代码之间的转换表之类的东西。如果Fn键被按住,键盘将使用另一个转换表。一些键具有相同的键代码,其他一些键具有不同的键代码。(这是现实的极其简化的模型,但对于这个例子它有效。)
由于制造商Fn以不同的方式实现按键,因此没有适用于所有键盘的简单解决方案。我认为应该可以将以下小解决方案组合成一个大解决方案。但我不会完全解决这个问题,我认为这不是很花哨。
Fn 按键在键盘微控制器上处理如果Fn按键是在键盘微控制器上
处理的:处理键盘返回的键码。就比如我的键盘发送Fn+F1的VolumeMute关键代码。这仅在两个表之间存在差异时才有效,如上所述。
如果您的解决方案不能在所有设备上工作,您可以简单地尝试由什么键组合发出什么 Qt 键。例如,在我的系统上,组合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/。但这非常依赖于驱动程序。)
| 归档时间: |
|
| 查看次数: |
1050 次 |
| 最近记录: |