Ich habe andere Fragen zu diesem Thema in StackOverflow untersucht, aber es hat mir nicht geholfen. Ich bin neu in QML/Javascript und habe QML-Dokumente über diese Frage gelesen, aber es hat nicht geholfen.Laden Sie eine qml-Komponente dynamisch aus einer anderen qml-Datei und greifen Sie auf die Eigenschaften des qml-Typs dieser Komponente zu.
Im Folgenden finden Sie eine Datei 'SmallWindow.qml'
Item
{
...
property var statusColour: calStatusColour(()
property Component devViewNameComponent: devNameComp
function calStatusColour()
{
var color = "black" //Here, colour will be changed based on some status.
}
Row
{
Component{
id:devNameComp
Rectangle
{
id:statusRect
width: parent.width * 0.2
height: parent.height
color: statusColour.color
Text
{
id: viewName
anchors.centerIn: parent
text: statusText == 0 ? "TrueText" : "FalseText"
font.pixelSize: 20
}
}
} //end of component
Rectangle
{...}
}
}
Ich habe eine andere Datei ‚FileDetailWindow.qml. In dieser Datei, in der Funktion 'showDetailWindow', möchte ich auf die die Breite des ViewName der devViewNameComponent (von SmallWindow.qml) zugreifen und ändern. Ich bin nicht in der Lage, auf den viewName zuzugreifen, und ich bin mir nicht sicher, ob die Verwendung der Komponente richtig ist.
Item
{
...
//This function is called from another qml file
function showDetailWindow()
{
if (detailsWindow.devViewNameComponent.status == Component.Ready)
{
var compDevName = detailsWindow.devViewNameComponent.createObject(detailsWindow)
if (compDevName == null) {
console.log("Error creating object");
}
//Here I want to access and set the viewName's width dynamically when this function is called like below
//Other things about statusRect and ViewName can be same.
//below is wrong usage (detailsWindow.devViewNameComponent.viewName) and it does not work
if (detailsWindow.devViewNameComponent.viewName.paintedWidth > 75)
detailsWindow.devViewNameComponent.viewName.width = detailsWindow.devViewNameComponent.statusRect.width *0.75;
else
detailsWindow.devViewNameComponent.viewName.width= detailsWindow.devViewNameComponent.viewNamepaintedWidth;
}
}
SmallWindow
{
id: detailsWindow
visible: true;
...
}
}
Edit 1: Ich mag die Größe des Textes (id: Viewname) befestigen innen „showDetailWindow()“ als die Länge des View Textes wird dynamisch geändert werden.
Wie Sie sehen, befindet sich der viewName Text innerhalb des Rectangle (id: statusRect) und die Breite und Höhe von statusRect ändert sich nicht, während sich die Farbe basierend auf der Funktion calStatusColour() ändert.
Derzeit ist das Problem, dass ViewName Text außerhalb der StatusRect überschreitet, wenn die ViewName Länge größer ist als die StatusRect und ich möchte den ViewName Text innerhalb der Breite des StatusRect Rectangle verkürzen. Für z. Der Text muss wie "NameLengthWrapped ..." umbrochen werden, wenn der Text die Länge von statusRect Rectangle überschreitet.
Bitte geben Sie ein minimales Beispiel nennen, die ausgeführt wird. – Mitch
Ich sehe keinen Trigger zum Ausführen von showDetailWindow(). Erhalten Sie irgendeine Ausgabe, wenn Sie ein console.log ("genannt") in die allererste Zeile der Methode einfügen? –
@Mitch: Eigentlich ist es Teil des bestehenden Projekts. Da ich neu in QML bin, finde ich es schwierig, dasselbe in ein kleines Arbeitsbeispiel zu replizieren. – User1212