如何使 QInputDialog 触发虚拟键盘显示?

Posted

技术标签:

【中文标题】如何使 QInputDialog 触发虚拟键盘显示?【英文标题】:How to make a QInputDialog trigger the virtual keyboard to show up? 【发布时间】:2015-03-05 09:32:57 【问题描述】:

我正在使用 Python 和 PySide 开发 Qt 应用程序。 该应用程序在 Ubuntu Linux 上运行;机器有一个触摸屏。

“板载”虚拟键盘用于让用户输入文本。默认情况下它是隐藏的。一旦像 gedit 这样的应用程序中的文本字段获得焦点,它会自动触发虚拟键盘并显示出来。

但是,在我的应用程序中,我有一个 QInputDialog,它要求用户输入一些内容。就我而言,聚焦 QInputDialog 的文本字段不会触发虚拟键盘出现。我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

根据README onboard 公开了一个 DBUS 服务,以允许应用程序切换其可见性。

您可能希望通过在 getText 调用之前和之后添加类似的内容来做到这一点。例如

msg = QtDBus.QDBusMessage.createMethodCall('org.onboard.Onboard', '/org/onboard/Onboard/Keyboard','org.onboard.Onboard.Keyboard'
                'org.onboard.Onboard.Keyboard.Show')
QtDBus.QDBusConnection.sessionBus().send(msg)
text, ok = QtGui.QInputDialog.getText(self, 'Input Dialog', 
            'Enter your name:')
msg2 = QtDBus.QDBusMessage.createMethodCall('org.onboard.Onboard', '/org/onboard/Onboard/Keyboard','org.onboard.Onboard.Keyboard'
                'org.onboard.Onboard.Keyboard.Hide')
QtDBus.QDBusConnection.sessionBus().send(msg2)

您也可以对这两个调用使用 ToggleVisible 方法。

这是特定于板载的,因为任何虚拟键盘解决方案的一般显示要么已使用现有 ibus 或 malitt 输入法引擎集成到 QT 中,要么通过实现 QPlatformInputContext 来完成,如 here 和 here 所示或者通过使用 DBUS 或其他一些消息传递解决方案(TCP 套接字等)的类似方法来切换特定虚拟键盘的状态。

【讨论】:

以上是关于如何使 QInputDialog 触发虚拟键盘显示?的主要内容,如果未能解决你的问题,请参考以下文章

当触发 iOS Safari 中的虚拟键盘时,它会使我的 CSS 过渡闪烁。如何解决这个问题?

移动web 怎么捕获虚拟键盘弹出和关闭事件

如何使底部按钮跟随 SwiftUI 中的键盘显示

如何显示被虚拟键盘隐藏的文本字段?

如何更改 mottie 虚拟键盘中自定义键的显示名称

提交类型的输入/按钮调出虚拟键盘