当用户按下可编辑的 UI 组件时在 Linux 中自动启动键盘

Posted

技术标签:

【中文标题】当用户按下可编辑的 UI 组件时在 Linux 中自动启动键盘【英文标题】:Auto launching keyboard in Linux when user presses on editable UI components 【发布时间】:2011-06-08 08:08:35 【问题描述】:

问题说明:虚拟键盘在linux环境下是必需的,每次用户按下可编辑的UI组件时都会启动虚拟键盘,如iPhone、iPad、android等虚拟键盘。

解决方案概述: 以matchbox-keyboard 作为虚拟键盘的基础,它是一个开源应用程序并提供丰富的功能。通过修改 QT 和 GTK 的源以将“on_press”信号(当用户按下可编辑的 UI 组件时)发送 Dbus 信号到某个打开虚拟键盘的守护程序,解决了自动切换机制。

问题: “on_press” Dbus 信号在用户按下或单击 UI 组件时发送,即在 QT 和 GTK 的“on_click”事件期间。虚拟键盘隐藏在 QT 和 GTK 的“focus_out”事件中。在“focus_in”事件期间键盘未打开,因为某些应用程序在启动时会发出“focus_in”事件片刻然后发出“focus_out”事件,因此虚拟键盘会在短时间内显示然后隐藏,这是不准确的。这是通过在“on_click”GTK 和 QT 事件期间生成“on_press”Dbus 信号来解决的。

所以现在我有另一个问题。

    假设用户按下可编辑框,出现虚拟键盘, "on_click" (GTK, QT 事件) -> "on_press" (Dbus 信号) -> 虚拟键盘启动 然后用户按下 Tab 按钮切换到其他可编辑框。 "focus_out" (GTK, QT 事件) -> "hide_keyboard" (Dbus 信号) -> 虚拟键盘被隐藏,不再启动。

发生这种情况是因为第二个可编辑框发出“focus_in”事件而不是“on_click”事件。

因此,当用户在带有标签按钮的可编辑框之间切换时,请帮助找到解决方案。或者,如果您有完全其他的解决方案,请提出建议。

提前致谢, 莱文

【问题讨论】:

【参考方案1】:

我是 Florence Virtual Keyboard 的作者:http://florence.sourceforge.net。 我使用 at-spi (http://en.wikipedia.org/wiki/Assistive_Technology_Service_Provider_Interface) 来解决问题。 at-spi 的优势在于它不仅适用于 GTK 和 Qt,而且适用于 java、Firefox 和 Libre/OpenOffice。

【讨论】:

【参考方案2】:

在支持的平台(嵌入式 Linux、WinCE)上,当软件输入面板应该显示时,Qt 会发出一个特殊的QEvent

QEvent::RequestSoftwareInputPanel   

描述是;

A widget wants to open a software input panel (SIP).

【讨论】:

以上是关于当用户按下可编辑的 UI 组件时在 Linux 中自动启动键盘的主要内容,如果未能解决你的问题,请参考以下文章

无法在反应 js 类组件中编辑 datetimepicker material-ui

React Material UI BottomNavigation 组件路由问题

Java Swing 在等待方法时在 actionPerformed 函数中更改 UI 两次

使用 Relay 的嵌套表单组件 UI 中的状态应该在哪里?

为什么用户控制C#Winforms的所有组件在UI编辑器和运行时都有不同的大小?

打开带有动态内容的 jQuery UI 对话框