问题陈述:Linux环境中需要虚拟键盘,每次用户按下可编辑的UI组件时都应启动虚拟键盘,如iPhone,iPad,Android等虚拟键盘。
解决方案概述:作为虚拟键盘的基础,采用了matchbox-keyboard,这是一个开源应用程序并提供丰富的功能。自动切换的机制通过修改QT和GTK的源来解决,以便在“on_press”信号上发送Dbus信号(当用户按下可编辑的UI comp时)到一些可以打开虚拟键盘的守护进程。
问题:“on_press”当用户按下或点击UI组件时,即在QT和GTK的“on_click”事件期间,会发送Dbus信号。虚拟键盘隐藏在QT和GTK的“focus_out”事件上。在“focus_in”事件期间键盘未打开,因为启动时某些应用程序发出“focus_in”事件片刻然后发出“focus_out”事件,因此虚拟键盘显示的时间很短,然后隐藏,这是不准确的。这是通过在“on_click”GTK和QT事件期间生成“on_press”Dbus信号来解决的。
所以现在我有另一个问题。
这是因为第二个可编辑框发出“focus_in”事件而不是“on_click”事件。
因此,当用户在带有标签按钮的可编辑框之间切换时,请帮助找到解决方案。或者,如果您有完全其他解决方案,请提出建议。
提前致谢, 列翁
答案 0 :(得分:5)
我是佛罗伦萨虚拟键盘的作者:http://florence.sourceforge.net。 我使用at-spi(http://en.wikipedia.org/wiki/Assistive_Technology_Service_Provider_Interface)来解决问题。 at-spi的优势在于它不仅适用于GTK和Qt,还适用于java,Firefox和Libre / OpenOffice。
答案 1 :(得分:1)
在支持的平台(嵌入式Linux,WinCE)上,当显示软件输入面板时,Qt会发出特殊的QEvent
;
QEvent::RequestSoftwareInputPanel
描述是;
A widget wants to open a software input panel (SIP).