我在StackOverflow中研究了有關此主題的其他問題,但它沒有幫助我。我是QML/Javascript的新手,我通過關於這個問題的QML文檔,但它沒有幫助。動態加載另一個qml文件中的qml組件並訪問該組件的qml類型屬性
下面是一個文件 '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
{...}
}
}
我還有一個文件「FileDetailWindow.qml。在這個文件中,在函數'showDetailWindow'中,我想要訪問並更改 devViewNameComponent(從SmallWindow.qml)viewName的寬度。我無法訪問viewName,我不確定使用該組件是否正確。
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;
...
}
}
編輯1:我要修復的文本(ID:的viewName)的大小內側「showDetailWindow()」作爲文本的viewName的長度將被動態地改變。
正如您所見,viewName Text位於Rectangle(id:statusRect)內,並且statusRect的寬度,高度不會更改,而其顏色將根據函數calStatusColour()更改。
目前,問題是,如果viewName長度大於statusRect,並且我想縮短statusRect Rectangle寬度內的viewName文本,那麼viewName Text超出了statusRect的範圍。例如。如果文本超出了statusRect Rectangle的長度,文本需要像「NameLengthWrapped ...」一樣打包。
請提供運行的小例子。 – Mitch
我沒有看到執行showDetailWindow()的觸發器。如果在方法的第一行中包含console.log(「調用」),您會得到任何輸出嗎? –
@Mitch:實際上,它是現有項目的一部分。因爲,我是QML的新手,我發現很難將其複製到一個小實例中。 – User1212