QML文檔是符合QML文檔語法的字符串。文檔定義了QML對象類型。通常從".qml"本地或遠程存儲的文件加載文檔,但是可以用代碼手動構建。由文檔定義的對象類型的實例可以使用QML代碼中的Component或C ++中的QQmlComponent來創建。或者,如果對象類型通過特定的類型名稱顯式地公開給QML類型系統,則可以在其他文檔的對象聲明中直接使用該類型。
在文檔中定義可重用的QML對象類型的能力是使客戶端能夠編寫模塊化,高度可讀且可維護的代碼的重要推動力。
從Qt 5.4開始,文檔也可以具有文件擴展名".ui.qml"。QML引擎處理這些文件,例如標準.qml文件,並且忽略.ui擴展名的一部分。Qt Creator將這些文件作為Qt快速設計器的UI表單進行處理。這些文件只能包含Qt Creator定義的QML語言的子集。
QML文件的結構
QML文檔包括兩個部分:導入部分和對象聲明部分。文檔中的imports部分包含import語句,這些語句定義了文檔可以使用的QML對象類型和JavaScript資源。對象聲明部分定義了實例化文檔定義的對象類型時要創建的對象樹。
一個簡單文檔的示例如下:
<code>import
QtQuick
2.0Rectangle
{width
:300
height:200
color:"blue"
}/<code>
QML語言的語法
文檔的對象聲明部分必須使用適當的QML語法指定有效的對象層次結構。對象聲明可以包括自定義對象屬性的規範。可以將對象方法屬性指定為JavaScript函數,並且可以為對象屬性屬性分配屬性綁定表達式。
請參閱有關QML語法的文檔,以獲取有關有效語法的更多信息,並請參閱有關集成QML和JavaScript的文檔,以獲取有關該主題的深入信息。
通過QML文檔定義對象類型
如上一節中簡要描述的,文檔隱式定義了QML對象類型。QML的核心原則之一是能夠定義然後再使用對象類型。這提高了QML代碼的可維護性,提高了對象層次結構聲明的可讀性,並促進了UI定義和邏輯實現之間的分離。
在下面的示例中,客戶端開發人員定義了Button類型:
<code>//
Button.qml
import
QtQuick
2.0
Rectangle
{
width:
100
;
height:
100
color:
"red"
MouseArea
{
anchors.fill:
parent
onClicked:
console.log("Button
clicked!")
}}
在應用中就可以使用這個Button:
//
application.qmlimport
QtQuick
2.0
Column
{
Button
{
width:
50
;
height:
50
}
Button
{
x:
50
;
width:
100
;
height:
50
;
color:
"blue"
}
Button
{
width:
50
;
height:
50
;
radius:
8
}}
/<code>
請參閱有關在文檔中定義對象類型的文檔,以獲取有關該主題的深入信息。
資源加載和網絡透明度
重要的是要注意,QML是網絡透明的。應用程序可以從遠程路徑導入文檔,就像從本地路徑導入文檔一樣簡單。實際上,url可以為任何屬性分配遠程或本地URL,並且QML引擎將處理涉及的任何網絡通信。
請參閱後續網絡透明性文檔以獲取有關導入中網絡透明性的更多信息。
範圍和命名分辨率
文檔中的表達式通常涉及對象或對象的屬性,並且由於可以定義多個對象,並且由於不同的對象可能具有名稱相同的屬性,因此必須由QML定義一些預定義的符號解析語義。請參閱後續有關範圍和符號解析的頁面,以獲取有關該主題的深入信息。