新聞中心
在工程中有很多情況是需要動態(tài)創(chuàng)建對象來完成需求的,QML當(dāng)中也是可以進行動態(tài)創(chuàng)建的,創(chuàng)建的范圍包括但不限于組件和對象。
首先想要動態(tài)創(chuàng)建組件需要了解組件是什么
一、Component
Component是由一個由開發(fā)者封裝好的,只暴露必要接口的QML類型,可以重復(fù)使用,有點像類的概念但又不完全像。下面是一個組件的定義:
Component{
id:id_Comp
Rectangle{
id:id_Root
width: 200
height: 200
color: mData ? "red" : "blue"
property bool mData: false
MouseArea{
anchors.fill: parent
onClicked: {
id_Root.mData = !id_Root.mData
}
}
}
}
這就是定義了一個點擊變色的矩形組件,組件的定義要求就是只能包含一個頂層Item,并且在這個Item之外不能定義除了Id之外的任何數(shù)據(jù),它通常是給view提供圖形化組件的,它本身不是一個可見元素,必須要實例化后才能顯示。而示例化的方式可以靜態(tài)添加也可以動態(tài)創(chuàng)建,這里主要講一下動態(tài)創(chuàng)建。注:定義Component時組件名與文件名一致,組件名首字母大寫。組件實例的id和組成組件的頂層Item的id是各自獨立的。
二、動態(tài)創(chuàng)建的方式
1.Loader
Loader用來動態(tài)加載QML組件,可以把它當(dāng)作一個占位符,需要用時才加載。下面是Loader的實例:
Loader{
id:id_loader
sourceComponent: id_Comp
}
通過代碼就可以知道loader只需要設(shè)置sourceComponent或source屬性,就可以把組件加載進來,當(dāng)sourceComponent或source發(fā)生改變時會重新加載對象,之前加載的對象會被銷毀。當(dāng)sourceComponent或source為空或者undefined時,會銷毀當(dāng)前加載的對象,相關(guān)資源也會釋放,而loader對象則會變?yōu)橐粋€空對象。loader的item屬性指向了它頂層item,所以可以通過訪問loader的item去修改被加載對象的屬性。如果組件過大,加載起來非常耗費資源,可以采用異步加載的方式只需要將asynchronous屬性設(shè)置為true就可以了。
2.在ECMAScript中動態(tài)創(chuàng)建對象
在ECMAScript中,有兩種方式可以動態(tài)創(chuàng)建:
a.使用Qt.CreateComponent()動態(tài)創(chuàng)建一個組件對象,然后使用Component的createObject()方法創(chuàng)建對象
var component = Qt.createComponent("Button.qml");
if (component.status == Component.Ready) {
var button = component.createObject(parent,
{"width":120,"height":120});
}
返回的button對象就行動態(tài)創(chuàng)建出來的對象的地址,可以通過button去修改對象的屬性
createObject函數(shù)第一個參數(shù)指定parent,后面的列表指定屬性
b.使用Qt.createQmlObject()從QML字符串直接創(chuàng)建一個對象
這種情況適用于在同一個qml文件內(nèi)部就進行創(chuàng)建
const newObject = Qt.createQmlObject(`
import QtQuick 2.0
Rectangle {
color: "red"
width: 20
height: 20
}
`,
parentItem,
"myDynamicSnippet"
);
第一個參數(shù)是需要創(chuàng)建的QML對象的描述文檔,第二個參數(shù)是指定parent,第三個參數(shù)是關(guān)聯(lián)文件,用于錯誤報告
注意:動態(tài)創(chuàng)建的對象不需要使用之后應(yīng)該進行銷毀,如果是loader進行管理的就將source或者sourceComponent設(shè)置為空,其它的就應(yīng)該調(diào)用destroy()方法進行銷毀,這個函數(shù)的唯一參數(shù)是指定多少毫秒再進行刪除,不寫就為0,立即刪除。
常規(guī)的動態(tài)創(chuàng)建方法基本就是上述三種,還有些非常規(guī)的比如Repeater,這個在之后的文章進行單獨介紹
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
新聞標(biāo)題:QML----動態(tài)創(chuàng)建對象-創(chuàng)新互聯(lián)
地址分享:http://fisionsoft.com.cn/article/hhiji.html