如何在 Windows 中仅针对平板电脑模式启动 Qt 虚拟键盘

How launch Qt Virtual keyboard only for Tablet Mode in Windows

我正在为 Windows 台式机和平板电脑制作应用程序。我需要在平板电脑模式下启动 Qt 虚拟键盘。

我遵循了 Qt 文档中的 this 示例

我只是在 main.cpp 中添加了一行代码来让 Qt 虚拟键盘正常工作

qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));

但现在虚拟键盘也可以在桌面模式下启动,这不是必需的。如何限制 Qt 虚拟键盘仅用于平板电脑模式?

我正在使用 Qt 5.9 并尝试了 5.12。 Windows 屏幕键盘不会在需要时一直启动

要检查 tablet 模式,您可以使用 Qt 5.9 中引入的 bool QWindowsWindowFunctions::isTabletMode() 静态函数。要在 table 模式下启用虚拟键盘并在桌面模式下禁用虚拟键盘,您可以分别在计时器和 show/hide InputPanel 中定期检查它:

InputPanel {
    id: inputPanel

    property bool enableKeyboard: false
    ...
    states: State {
        name: "visible"
        when: enableKeyboard && inputPanel.active
        PropertyChanges {
            target: inputPanel
            y: appContainer.height - inputPanel.height
        }
    }
    ...
}

enableKeyboard 属性 定义为 activate/deactivate 键盘,应使用 Timer 定期更新,例如:

Timer {
    onTriggered: enableKeyboard = utils.isTabletMode()
    running: true
    repeat: true
    interval: 1000
}

您应该在基于 QObject 的 class 中定义 isTabletMode 函数,例如:

#include <QtPlatformHeaders/QWindowsWindowFunctions>
...
Q_INVOKABLE bool isTabletMode() {
     return QWindowsWindowFunctions::isTabletMode();
}

别忘了通过以下方式让您 class 了解 qml:

qmlengine->rootContext()->setContextProperty("utils", pointerToMyClass);