виртуальная клавиатура qt не отображается

Я пытаюсь использовать виртуальную клавиатуру qt на Raspberry Pi, и у меня возникают проблемы с вызовом клавиатуры.

Я настроил проект следующим образом, чтобы разрешить использование виртуальной клавиатуры:

//In the PRO file
QT += qml quick quickcontrols2 xml
static {
    QT += svg
    QTPLUGIN += qtvirtualkeyboardplugin
}

CONFIG += c++11 disable-desktop

Я думаю, что disable-desktop должно быть достаточно, чтобы вызвать виртуальную клавиатуру, по крайней мере, это мое предположение.

Первая строка в моем файле main:

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

Это гарантирует, что модуль загружен. Я убедился, что без этой строки программа выдает ошибку «Виртуальный модуль клавиатуры не найден».

Теперь у меня есть простой компонент с текстовым полем:

import QtQuick 2.0
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.1
import QtQuick.VirtualKeyboard 2.1

TextField {
            id: idField
            width: 80
            height: 30
            placeholderText: qsTr("ID")
            Layout.maximumHeight: 30
            Layout.minimumHeight: 30
            Layout.minimumWidth: 80
            Layout.maximumWidth: 80
            focus: true
            anchors.horizontalCenter: parent.horizontalCenter
            inputMethodHints: Qt.ImhDigitsOnly
        }

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


person Pankaj Daga    schedule 07.07.2017    source источник


Ответы (1)


disable-desktop следует передавать в качестве аргумента qmake перед сборкой виртуальной клавиатуры Qt, а не приложения, использующего клавиатуру:

qmake CONFIG+=disable-desktop qtvirtualkeyboard.pro

Однако я думаю, что этот код будет автоматически обрабатывать это для встроенных устройств (это означает, что предварительно собранный/упакованный Qt должен работать).

При использовании disable-desktop вы должны предоставить InputPanel:

import QtQuick 2.7
import QtQuick.Controls 2.0
import QtQuick.VirtualKeyboard 2.0

ApplicationWindow {
    id: window
    visible: true
    width: 640
    height: 480

    TextField {
        anchors.centerIn: parent
    }

    InputPanel {
        id: inputPanel
        z: 89
        y: active ? parent.height - height : parent.height
        anchors.left: parent.left
        anchors.right: parent.right
    }
}

Есть более сложный пример этого здесь. В этой части документации упоминается это, и в следующей главе также есть пример:

В методе интеграции приложения требуется, чтобы приложение создало экземпляр InputPanel, как описано в следующей главе.

person Mitch    schedule 07.07.2017
comment
Я пробовал примеры qt на том же устройстве с виртуальной клавиатурой, и они, кажется, работают, поэтому ясно, что клавиатура построена правильно. - person Pankaj Daga; 10.07.2017
comment
Я забыл одну довольно важную вещь.. :D - person Mitch; 10.07.2017
comment
Да, это было так. Я полностью упустил необходимость предоставления InputPanel. - person Pankaj Daga; 10.07.2017