為什么需要將屬性導(dǎo)出
在進(jìn)行QML應(yīng)用開發(fā)時,很多時候都是以組件的形式規(guī)劃軟件的,然而一個組件又由許多子元素組成和描述。當(dāng)我們需要從一個組件引用另一個組件的屬性時,這時候就需要將被引用組件的屬性導(dǎo)出。例如:當(dāng)一個組件是由數(shù)據(jù)驅(qū)動的,那么就必須將被數(shù)據(jù)驅(qū)動的屬性導(dǎo)出,供其他組件引用使用和修改。
屬性導(dǎo)出
將一個組件的屬性導(dǎo)出,有兩種形式:
(1)自定義屬性。
(2)屬性別名。
為一個組件類型自定義屬性,其語法格式為:
【readonly】property
property是固定寫法。
自定義的屬性默認(rèn)有一個屬性值改變信號,我們可以使用on
propertyaliaslabel:labelText.text propertycolortint:"blue" onLabelChanged:console.log("aliasLabelChanged") onTintChanged:console.log("tintChanged")
上述代碼中,onLabelChanged信號處理程序用于接收label的改變信號;onTintChanged用于接收Tint的改變信號。
為一個組件定義一個屬性別名,寫法如下所示:
[default]propertyalias:
property alias是標(biāo)準(zhǔn)寫法,不能更改。
聲明屬性別名與普通的屬性定義類似,只是它需要alias關(guān)鍵字而不是屬性類型,并且屬性聲明的右側(cè)必須是一個有效的別名引用。
例如:
propertyaliasbutton:item.button
上述代碼中,別名則是指item組件實(shí)例中的按鈕組件實(shí)例。
在 Qt Design Studio和QtCreate設(shè)計(jì)模式中,我們可以使用Navigator中的(Export)按鈕將組件導(dǎo)出為具有有效別名引用的屬性名:

注:導(dǎo)出的屬性可以在『Connections』視圖下的Properties中查看。
注:在其他文件代碼中使用的組件必須導(dǎo)出為屬性。
注:在QtCreator設(shè)計(jì)模式下導(dǎo)出組件屬性的方法與Qt Design Studio是一樣的。
一個實(shí)例
看一個具體實(shí)例,下面代碼是自定義的一個按鈕(Button):
importQtQuick2.0
Item{
id:container
propertyaliaslabel:labelText.text
propertycolortint:"blue"
signalclicked
width:labelText.width+70;height:labelText.height+18
BorderImage{
anchors{fill:container;leftMargin:-6;topMargin:-6;rightMargin:-8;bottomMargin:-8}
source:'images/box-shadow.png'
border.left:10;border.top:10;border.right:10;border.bottom:10
}
Image{anchors.fill:parent;source:"images/cardboard.png";antialiasing:true}
Rectangle{
anchors.fill:container;color:container.tint;visible:container.tint!=""
opacity:0.25
}
Text{id:labelText;font.pixelSize:15;anchors.centerIn:parent}
MouseArea{
anchors{fill:parent;leftMargin:-20;topMargin:-20;rightMargin:-20;bottomMargin:-20}
onClicked:container.clicked()
}
}
上述代碼中,自定義按鈕的height、width參數(shù)由labelText標(biāo)簽文本來確定,然后創(chuàng)建一個Rectangle用于顯示按鈕顏色,創(chuàng)建MouseArea用于接收鼠標(biāo)的點(diǎn)擊事件,并定義了一個clicked信號:
signalclicked
在MouseArea類型的點(diǎn)擊事件處理程序中發(fā)出該信號:
MouseArea{
anchors{fill:parent;leftMargin:-20;topMargin:-20;rightMargin:-20;bottomMargin:-20}
onClicked:container.clicked()
}
使用Image類型導(dǎo)入一張圖片,作為按鈕的背景:
Image{anchors.fill:parent;source:"images/cardboard.png";antialiasing:true}
因?yàn)榘粹o的文本和顏色需要被其他組件類型控制(即,在其他組件的屬性綁定或邏輯處理中需要改變按鈕的文本和顏色值),所以添加了一個顏色屬性(用于表示按鈕的顏色)和label別名(引用labelText元素的text屬性):
//label別名 propertyaliaslabel:labelText.text //顏色屬性 propertycolortint:"blue"
通過上述代碼,將屬性導(dǎo)出后,在其他組件類型中則可通過label和tint訪問按鈕組件內(nèi)的屬性。
在設(shè)計(jì)中,有效的別名引用有以下幾個特性(以上述例子中代碼為例):
(1)只能指向聲明了屬性別名的組件中的組件實(shí)例或?qū)傩浴?/p>
(2)不能包含JavaScript表達(dá)式。例如下列寫法是錯誤的:
propertyaliaslabel:console.log("clicked")
(3)除了聲明屬性別名的組件外,不能指向其他類型的組件。
(4)不能指向附加的屬性。
在別名引用的寫法格式上,別名引用必須指定為:
以下幾種寫法都是錯誤的:
propertyaliaslabel:myName propertystringmyName:"iriczhao"
上述代碼位置交換一下也是錯誤的。下列從根元素(container為根元素的id)引用的寫法也是錯誤的:
propertystringmyName:"iriczhao" propertyaliaslabel:container.myName
(5)不能引用深度超過3層的嵌套屬性。例如下列錯誤的用法:
//該屬性引用將不能正常工作
propertyaliascolor:myItem.myRect.border.color
Item{
id:myItem
propertyRectanglemyRect
}
審核編輯:劉清
-
數(shù)據(jù)驅(qū)動
+關(guān)注
關(guān)注
0文章
170瀏覽量
12802
原文標(biāo)題:qml屬性導(dǎo)出
文章出處:【微信號:嵌入式小生,微信公眾號:嵌入式小生】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
LM555QML定時器:功能特性、應(yīng)用及設(shè)計(jì)要點(diǎn)
德州儀器LM117QML/LM117QML - SP可調(diào)穩(wěn)壓器深度解析
深入剖析 LM136-5.0QML 與 LM136A-5.0QML:高精度 5.0V 參考二極管的理想之選
高速精密運(yùn)算放大器LM118QML:特性、應(yīng)用與設(shè)計(jì)要點(diǎn)
LM111QML電壓比較器:特性、應(yīng)用與設(shè)計(jì)要點(diǎn)解析
深入解析LM2941QML與LM2941QML - SP:1A低壓差可調(diào)穩(wěn)壓器的卓越之選
LM2941QML與LM2941QML - SP:1A低壓差可調(diào)穩(wěn)壓器詳解
探索LP2953QML與LP2953QML - SP:可調(diào)微功耗低壓差穩(wěn)壓器的卓越之選
深入剖析LM6172QML:從特性到應(yīng)用的全面解讀
解析LM2940QML與LM2940QML - SP:1A低壓差穩(wěn)壓器的卓越之選
深入剖析LM2940QML與LM2940QML - SP 1A低壓差穩(wěn)壓器
?LM136A-2.5QML/LM136A-2.5QML-SP 技術(shù)文檔摘要
?LM4050QML精密微功耗并聯(lián)電壓基準(zhǔn)芯片技術(shù)文檔總結(jié)
凡億Allegro Skill工藝輔助之導(dǎo)出公制的坐標(biāo)
為什么需要將QML的屬性導(dǎo)出呢
評論