Evgenii Legotckoi
Evgenii Legotckoi2. November 2015 02:55

QML - Lektion 010. Zugriff auf untergeordnete Objekte in TabView

Die Struktur von Objekten in Qml ist ein hierarchischer Baum, in dem Sie, um auf die Eigenschaften von Objekten der niedrigeren Ebene zuzugreifen, auf das ursprüngliche Objekt verweisen müssen, dann das untergeordnete Objekt auswählen und die Eigenschaft von auswählen müssen das untergeordnete Objekt, auf das Sie zugreifen möchten.

Aber im Fall von TabView funktioniert dieser Ansatz nicht, da Tab -Tab-Objekte dynamisch hinzugefügt werden, daher müssen Sie auf den Tab über seinen Index zugreifen und das item -Objekt aufnehmen daraus und finden Sie das untergeordnete Objekt, an dem wir interessiert sind, in diesem Element auch per Index. Und danach erhalten Sie Zugang zu der Immobilie, an der wir interessiert sind. Ich empfehle auch darauf zu achten, dass in diesem Fall die Codevervollständigung in QtCreator. nicht funktioniert.

Darüber hinaus erhalten Sie höchstwahrscheinlich eine Fehlermeldung mit folgendem Inhalt:

ReferenceError: 'etwas' ist nicht definiert


Projektstruktur für die Arbeit mit TabView

In diesem Beispiel wird das Standardprojekt verwendet:

  • QmlTableView.pro - Projektprofil;
  • main.cpp - C++-Hauptquelldatei;
  • main.qml - Quellcodedatei der qml-Schicht.

main.qml

Da die Änderungen nur an der Datei main.qml im Projekt vorgenommen werden, gehe ich nicht näher auf die Beschreibung der Dateien ein, die standardmäßig erstellt bleiben.

Für diese Datei ist die Logik der Anwendung wie folgt. Es gibt ein Hauptanwendungsfenster, das ein Button -Objekt und ein TabView. -Objekt enthält.Die TabView enthält zwei Registerkarten, von denen eine die zweite Schaltfläche enthält. Wenn Sie auf die erste Schaltfläche klicken, ändert sich der Text auf der zweiten Schaltfläche, wenn Sie auf die zweite Schaltfläche klicken, ändert sich der Text auf der ersten Schaltfläche.

import QtQuick 2.5
import QtQuick.Controls 1.4

ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr("Qml TabView")

    // Кнопка, по нажатию которой изменится текст кнопки в объекте Tab
    Button {
        id: button
        text: qsTr("Кнопка 1")
        anchors.top: parent.top
        anchors.topMargin: 5
        anchors.left: parent.left
        anchors.leftMargin: 5

        /* Забираем вкладку с целевой кнопкой,
         * далее объект, который формирует набивку вкладки.
         * После чего вычленяем нужный дочерний объект по индексу.
         * И уже из этого объекта берём требуемое свойство,
         * то есть текст, которому присваиваем новое текстовое значение
         * */
        onClicked: {
            tabView.getTab(0).item.children[0].text = "Кнопка 1"
        }
    }

    /* TabView, в первой вкладке которого находится кнопка,
     * по нажатию кнопки которой из изменится текст в первой кнопке
     */
    TabView {
        id: tabView
        anchors.top: button.bottom
        anchors.topMargin: 5
        anchors.left: parent.left
        anchors.right: parent.right
        anchors.bottom: parent.bottom

        Tab {
            id: tab1
            title: qsTr("Первая вкладка")

            component: Item {
                id: rect1

                Button {
                    id: buttonTab
                    text: qsTr("Кнопка 2")
                    anchors.top: parent.top
                    anchors.topMargin: 5
                    anchors.left: parent.left
                    anchors.leftMargin: 5

                    /* Переписываем текстовое значение
                     * первой кнопки
                     * */
                    onClicked: {
                        button.text = "Кнопка 2"
                    }
                }
            }
        }

        Tab {
            id: tab2
            title: qsTr("Вторая вкладка")
        }
    }
}

Insgesamt

Als Ergebnis der geleisteten Arbeit können Sie auf die untergeordneten Objekte in den TabView-Registerkarten zugreifen.

Ich empfehle Ihnen auch, sich mit dem Video-Tutorial vertraut zu machen, das eine detailliertere Erklärung des Fehlers „Referenzfehler: Etwas ist nicht definiert“ enthält, der auftritt, wenn auf Objekte in den TabView-Registerkarten falsch zugegriffen wird.

Videoanleitung

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

Magst du es? In sozialen Netzwerken teilen!

Terabaytus
  • 4. Juni 2018 04:49

Добрый день, не совсем понятна закономерность вызовов, то есть

здесь любой объект.get (0/*индекс*/). Если у меня нет группы что будет.children[0].text 
можно более подробно ?

Evgenii Legotckoi
  • 4. Juni 2018 06:38

не обязательно, но вполне возможно, children возвращает контейнер со всеми дочерними объектами, которые находятся в текущем объекте.

Этот метод идёт ещё из QObject. Потом можно в цикле по objectName искать нужный объект.

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18: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 10: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 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15: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 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken