Evgenii Legotckoi
Evgenii Legotckoi9. November 2015 04:03

QML - Lektion 012. Datenübertragung vom TextInput in ListView (Modell / Ansicht)

Die Arbeit mit ListView in QML ist ein ziemlich häufiger Aspekt bei der Entwicklung einer Anwendung für Android , da so viele Anwendungen Listen mit Daten, Aufzeichnungen, Parametern usw. in ihrer Funktionalität haben. Dies gilt auch für die Entwicklung von Anwendungen für Desktop auf QML , das Prinzip ist für beide Plattformen ähnlich.

Um die Übertragung von Informationen an die Liste in Betracht zu ziehen, schlage ich vor, dass Sie die folgende Option zur Interaktion mit ListView. sorgfältig prüfen.

Das Prinzip der Darstellung von Daten in einer ListView

Das Objekt ListView hat zwei wichtige Eigenschaften:

  1. Delegat – definiert das Aussehen eines Elements in ListView
  2. Modell - in dem die Daten jedes Elements platziert werden

Sie können das ListModel -Objekt als Datenpräsentationsmodell verwenden, das Daten für jedes Element in der Liste enthält. Dadurch werden Daten Variablen zugewiesen, die bestimmten Objekteigenschaften in delegate zugewiesen wurden. In der folgenden Abbildung hat delegate zwei Textobjekte , deren text -Eigenschaften den Variablen zugewiesen wurden text_first* * und text_second. Diese Variablen bestimmen, wo die Daten von jedem ListElement in ListModel. ersetzt werden. hat zwei Eigenschaften, deren Namen mit den Variablen identisch sind, die in delegate. zugewiesen werden. Tatsächlich sind diese Variablen Rollen, für die Werte aus ListModel ersetzt werden. Somit erhalten wir * *ListView mit Textfeldern, die mit den Daten gefüllt sind, die in jedes * ListElement bis ListModel. * eingegeben wurden.


Arbeiten mit TextInput

Die Daten werden in das Feld TextInput eingetragen und als neues Element an die ListView übergeben. Das heißt, nachdem die Daten in TextInput eingegeben wurden, fügen wir ListView ein neues Element hinzu, indem wir die in TextInput eingegebenen Daten hineinschreiben. Ein Ereignis, das die Übertragung von auslöst Daten aus TextInput ListView werden durch Drücken der Enter -Taste oder Klicken auf eine spezielle Schaltfläche Button bereitgestellt, in deren Handler auch Code zum Hinzufügen eines Elements hinzugefügt wird Daten von TextInput bis ListView.

main.qml

In einem in Qt Creator erstellten Projekt wird nur die Datei main.qml. bearbeitet.

import QtQuick 2.5
import QtQuick.Controls 1.4
import QtQuick.Layouts 1.1

ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    // Слой в котором располагается TextInput и Button
    RowLayout {
        id: rowLayout
        anchors.top: parent.top
        anchors.left: parent.left
        anchors.right: parent.right
        anchors.margins: 5
        height: 30

        spacing: 5
        z:2         /* Уровень расположения слоёв элементов.
                     * Элемент с z = 2 располагается выше, чем элемент с z = 1
                     */

        // Область с TextInput
        Rectangle {
            Layout.fillWidth: true
            Layout.fillHeight: true
            color: "white"

            TextInput {
                id: textInput
                anchors.fill: parent
                horizontalAlignment: Text.AlignHCenter
                verticalAlignment: Text.AlignVCenter

                /* По нажатию клавиши Enter передаём информацию
                 * из TextInput в элемент ListView
                 * */
                Keys.onPressed: {
                    // 16777220 - код клавиши Enter
                    if(event.key === 16777220){
                        listModel.append({ textList: textInput.text })
                    }
                }
            }
        }

        /* Кнопка, по нажатию которой передаётся информация из
         * textInput в элемент ListView
         * */
        Button {
            id: button
            text: qsTr("добавить")
            Layout.fillHeight: true

            onClicked: {
                listModel.append({ textList: textInput.text })
            }
        }
    }

    // Список, в который добавляются элементы с данными из TextInput
    ListView {
        id: listView

        anchors.top: rowLayout.bottom
        anchors.left: parent.left
        anchors.right: parent.right
        anchors.bottom: parent.bottom
        anchors.margins: 5
        z: 1 // Расположение ниже, чем слой с TextInput и Button

        // Описание внешнего вида одного элемента в ListView
        delegate: Text {
            anchors.left: parent.left
            anchors.right: parent.right
            height: 50
            horizontalAlignment: Text.AlignHCenter
            verticalAlignment: Text.AlignVCenter

            text: textList // Роль свойства text, в которую будут передаваться данные
        }

        // Модель для представления данных в ListView
        model: ListModel {
            id: listModel
        }
    }
}

Insgesamt

Das Ergebnis dieses Programmcodes ist in der Abbildung dargestellt und kann auch im Video-Tutorial zu diesem Artikel angesehen werden.

Der vorgestellte Algorithmus zum Arbeiten mit ListView und TextInput gilt auch für andere Objekte anstelle von TextInput wie Button usw.

Das Abrufen von Daten von Objekten, die sich in ListElement in ListView befinden, ähnelt dem Arbeiten mit Schaltflächen im Artikel über dynamisches Erstellen und Löschen von Elementen in einer ListView .

Videoanleitung

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
ИМ
Игорь Максимов5. Oktober 2024 14:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 18:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr9. Februar 2024 02:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25. Dezember 2023 18:30
Boost - statisches Verknüpfen im CMake-Projekt unter Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 10:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 22:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 16:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 11:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken