Как запустить виртуальную клавиатуру Qt только для планшетного режима в Windows - PullRequest
1 голос
/ 26 марта 2019

Я делаю приложение для десктопов и планшетов Windows.Мне нужно запустить виртуальную клавиатуру Qt в режиме планшета.

Я следовал этому примеру в Qt docs

Я просто поместил одну строку кода в свой main.cpp, чтобы получитьВиртуальная клавиатура Qt работает

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

Но теперь виртуальная клавиатура также запускается в режиме рабочего стола, что не нужно.Как ограничить виртуальную клавиатуру Qt только для режима планшета?

Я использую Qt 5.9 и пробовал 5.12.Экранная клавиатура Windows не запускается постоянно при необходимости

1 Ответ

1 голос
/ 26 марта 2019

Для проверки режима планшета вы можете использовать bool QWindowsWindowFunctions::isTabletMode() статическую функцию, которая представлена ​​в Qt 5.9. Для включения виртуальной клавиатуры в настольном режиме и отключения в режиме рабочего стола вы можете периодически проверять ее по таймеру и показывать / скрывать 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();
}

Не забудьте выставить свой класс в qml:

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