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.
Добрый день, не совсем понятна закономерность вызовов, то есть
можно более подробно ?не обязательно, но вполне возможно, children возвращает контейнер со всеми дочерними объектами, которые находятся в текущем объекте.