為什么需要將屬性導(dǎo)出
在進行QML應(yīng)用開發(fā)時,很多時候都是以組件的形式規(guī)劃軟件的,然而一個組件又由許多子元素組成和描述。當我們需要從一個組件引用另一個組件的屬性時,這時候就需要將被引用組件的屬性導(dǎo)出。例如:當一個組件是由數(shù)據(jù)驅(qū)動的,那么就必須將被數(shù)據(jù)驅(qū)動的屬性導(dǎo)出,供其他組件引用使用和修改。
屬性導(dǎo)出
將一個組件的屬性導(dǎo)出,有兩種形式:
(1)自定義屬性。
(2)屬性別名。
為一個組件類型自定義屬性,其語法格式為:
【readonly】property
property是固定寫法。
自定義的屬性默認有一個屬性值改變信號,我們可以使用on
propertyaliaslabel:labelText.text propertycolortint:"blue" onLabelChanged:console.log("aliasLabelChanged") onTintChanged:console.log("tintChanged")
上述代碼中,onLabelChanged信號處理程序用于接收label的改變信號;onTintChanged用于接收Tint的改變信號。
為一個組件定義一個屬性別名,寫法如下所示:
[default]propertyalias:
property alias是標準寫法,不能更改。
聲明屬性別名與普通的屬性定義類似,只是它需要alias關(guān)鍵字而不是屬性類型,并且屬性聲明的右側(cè)必須是一個有效的別名引用。
例如:
propertyaliasbutton:item.button
上述代碼中,別名則是指item組件實例中的按鈕組件實例。
在 Qt Design Studio和QtCreate設(shè)計模式中,我們可以使用Navigator中的(Export)按鈕將組件導(dǎo)出為具有有效別名引用的屬性名:
注:導(dǎo)出的屬性可以在『Connections』視圖下的Properties中查看。
注:在其他文件代碼中使用的組件必須導(dǎo)出為屬性。
注:在QtCreator設(shè)計模式下導(dǎo)出組件屬性的方法與Qt Design Studio是一樣的。
一個實例
看一個具體實例,下面代碼是自定義的一個按鈕(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標簽文本來確定,然后創(chuàng)建一個Rectangle用于顯示按鈕顏色,創(chuàng)建MouseArea用于接收鼠標的點擊事件,并定義了一個clicked信號:
signalclicked
在MouseArea類型的點擊事件處理程序中發(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}
因為按鈕的文本和顏色需要被其他組件類型控制(即,在其他組件的屬性綁定或邏輯處理中需要改變按鈕的文本和顏色值),所以添加了一個顏色屬性(用于表示按鈕的顏色)和label別名(引用labelText元素的text屬性):
//label別名 propertyaliaslabel:labelText.text //顏色屬性 propertycolortint:"blue"
通過上述代碼,將屬性導(dǎo)出后,在其他組件類型中則可通過label和tint訪問按鈕組件內(nèi)的屬性。
在設(shè)計中,有效的別名引用有以下幾個特性(以上述例子中代碼為例):
(1)只能指向聲明了屬性別名的組件中的組件實例或?qū)傩浴?/p>
(2)不能包含JavaScript表達式。例如下列寫法是錯誤的:
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文章
141瀏覽量
12580
原文標題:qml屬性導(dǎo)出
文章出處:【微信號:嵌入式小生,微信公眾號:嵌入式小生】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
PADS導(dǎo)出.318文件遺漏器件
LM5175的四開關(guān)管升降壓開關(guān)電源,導(dǎo)出的原理圖中有六個開關(guān)管,為什么M3、M4各自需要并聯(lián)一個一樣的開關(guān)管呢?
DLP NIRscan Nano GUI只是采集光譜數(shù)據(jù)?導(dǎo)出的數(shù)據(jù),需要自行建模嗎?
ADC08D1520QML可以采集到的最高頻率是多少?
如何導(dǎo)出交換機的配置文件
ADS1100需要將補碼轉(zhuǎn)換為原碼嗎?怎么求實際的電壓值?
Chart FX——圖表導(dǎo)出

SOLIDWORKS高級BOM及屬性批量導(dǎo)入工具
機智云歷史數(shù)據(jù)導(dǎo)出與排查指南

DAC7744用作TMS320F2812的DAC時是否需要將2812輸出的高電平轉(zhuǎn)化為5v的高電平呢?
digiPCBA元件庫下載(轉(zhuǎn)化)本地,下載后的集成庫信息無法批量隱藏屬性信息
需要將多路單端音頻信號經(jīng)TPA3130放大至輸出,會有雜音怎么處理呢?
怎樣將keil中的程序導(dǎo)出
LM555QML定時器數(shù)據(jù)表

評論