gpt4 book ai didi

c++ - 如何创建类似 "Fn"+ Key_Up 的 QKeySequence

转载 作者:行者123 更新时间:2023-11-30 01:49:08 25 4
gpt4 key购买 nike


正如我从 Qt 文档(QKeySequenceQt 全局命名空间)中了解到的那样,我不能将笔记本 Fn 键用作快捷方式修饰符。
Qt 知道的唯一修饰符是:ShiftControlAltMeta。但是没有Fn!

但可能存在一些骇人听闻的方式吗?比如直接指定Fn代码。

代码:

m_actionGoToFirstPage->setShortcut( QKeySequence( Qt::Key_Up /*| Qt::Fn ???*/ ) );

最佳答案

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

一些上下文

如果按下经典修饰键(ShiftControlAltMeta),键盘发送一个关键代码。操作系统处理此键码并将其提供给相关应用程序。

Fn 键很特殊。一些制造商在键盘微 Controller 上处理它,如下所述。还有一些人发送了 Fn 键的经典键码。

系统处理键盘微 Controller 上的Fn

如果系统处理键盘微 Controller 上的 Fn 键:

你可以假设键盘内部有一些东西,比如键和键代码之间的转换表。如果按住 Fn 键,键盘会使用另一个转换表。一些键具有相同的键码,另一些键具有另一个键码。 (这是对现实的极其简化的模型,但对于这个例子来说它是有效的。)

解决方案

由于制造商实现 Fn 键的方式不尽相同,因此没有适用于所有键盘的简单解决方案。我认为应该可以将以下小解决方案组合成一个大解决方案。但我不会完全解决这个问题,我认为这不是很花哨。

Fn 键在键盘微 Controller 上处理

如果在键盘微 Controller 上处理 Fn 键:处理键盘返回的Key代码。例如,我的键盘在 Fn + F1 上发送 VolumeMute 键码。这仅在两个表之间存在差异时才有效,如上文所述。

如果您的解决方案不能在所有设备上工作,您可以简单地尝试通过什么组合键发出什么 Qt 键。例如,在我的系统上,组合 Fn + F1 就是这个 Qt 键: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/。但这非常依赖于驱动程序。)

关于c++ - 如何创建类似 "Fn"+ Key_Up 的 QKeySequence,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29517583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com