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

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

我只是在main.cpp中放了一行代码,以使Qt虚拟键盘正常工作

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

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

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

最佳答案

要检查平板电脑模式,可以使用Qt 5.9中引入的bool QWindowsWindowFunctions::isTabletMode()静态函数。要在表模式下启用虚拟键盘并在桌面模式下禁用虚拟键盘,可以定期在计时器中检查它并分别显示/隐藏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属性定义为激活/停用键盘,应使用Timer定期更新它,例如:
Timer {
    onTriggered: enableKeyboard = utils.isTabletMode()
    running: true
    repeat: true
    interval: 1000
}

您应该在基于isTabletMode的类中定义QObject函数,例如:
#include <QtPlatformHeaders/QWindowsWindowFunctions>
...
Q_INVOKABLE bool isTabletMode() {
     return QWindowsWindowFunctions::isTabletMode();
}

不要忘记通过以下方式将您的类(class)暴露给qml:
qmlengine->rootContext()->setContextProperty("utils", pointerToMyClass);

关于c++ - 如何在Windows中仅针对平板电脑模式启动Qt虚拟键盘,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55354498/

10-09 06:32
查看更多