Хобрук: Ваш путь к мастерству в программировании

Виртуальная клавиатура скрывает текст QML

У меня есть следующая виртуальная клавиатура, которая устанавливает значение y для flickable, чтобы не скрывать текст. переменная настроек содержит IntSettingsRow ниже.

//Administration.qml
K_VirtualKeyBoard{
    id: keyboard
    z:100
    onVisibleChanged: {
        if(visible){
            if(settings.posY - keyboard.height > 0){
                flickable.contentY = settings.posY - keyboard.height + 20
            }
            else{
                flickable.contentY = 0
            }
        }
        if(!visible){
            settings.settingsRow.textField.focus = false
            flickable.contentY = 0
        }                      
    }
}

И у меня есть IntSettingsRow, который представляет собой текстовое поле для вставки текста.

//GeneralSettings.qml
    IntSettingsRow{
        id: touchDeactivationTimedTime
        height: itemHeight
        anchors.left: parent.left
        anchors.right: parent.right
        anchors.topMargin: 8
        validator:  IntValidator{bottom: 10; top: 300}
        title: qsTr("deactivate time")+":"
        value: currentSettings?currentSettings.deactivationTime:0
        onValueChanged:{
            var val = parseInt(value)
            if (!isNaN(val)){
                currentSettings?currentSettings.deactivationTime = val:{}
            }
        }
        onEditingFinished: {
            if (value === "") textField.text = currentSettings.deactivationTime
        }

        onFocusChanged: {
            settingsRow = touchDeactivationTimedTime
            if(!textField.focus){
                editingFinished()
                posY = 0
            }else{
                posY = mapToItem(parent, x, y).y
            }
        }
    }

Каким-то образом при первом щелчке в текстовом поле виртуальная клавиатура появляется, как и ожидалось, и сдвигается. я прячу клавиатуру и пробую снова не работает. Таким образом, виртуальная клавиатура появляется, но не изменяется.

24.07.2018

Ответы:


1

Я нашел решение с редактированием flickable прямо из onfocus в моем intsettingsrow. теперь это работает

Итак, я изменил K_VirtualKeyboard на:

K_VirtualKeyBoard{
    id: keyboard
    z:100
    onVisibleChanged: {
        if(!visible){
            flickable.contentY = 0
        }
    }
}

И добавил это в текстовое поле, которое вызвало клавиатуру

    textField.onReleased: {
        var keyBoardY
        if(keyboard.visible)
            keyBoardY = keyboard.y
        else
            keyBoardY = keyboard.y - keyboard.height
        if(keyBoardY < (mapToItem(root.parent.parent,0,0).y + height*2))
            flickable.contentY = (mapToItem(root.parent.parent,0,0).y + height*2) - keyBoardY + 8
    }
24.07.2018
  • Не могли бы вы разместить полное решение здесь, пожалуйста? Трудно понять это из Вашего сообщения. 10.10.2019
  • @АлексейКонцевич некоторое время не видел вашего комментария. Я думаю, что уже поздно, но если нет, я обновил свой ответ. может это поможет вам или кому-то еще, кому это может понадобиться позже 23.06.2020
  • Спасибо! Не волнуйтесь, я нашел решения в других темах: stackoverflow.com/a/45947980/630169 24.06.2020
  • Новые материалы

    Деревья классификации и регрессии
    Это мой второй пост об алгоритмах машинного обучения. Мой первый пост посвящен искусственным нейронным сетям, вы можете найти его ниже. Нейронные сети — базовое..

    HMTL - Многозадачное обучение для решения задач НЛП
    Достижение результатов SOTA путем передачи знаний между задачами Область обработки естественного языка включает в себя десятки задач, среди которых машинный перевод, распознавание именованных..

    Решения DBA Metrix
    DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

    Начало работы с Блум
    Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

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

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..