QML 組件

參考:QML Tutorial 2 - QML Components - Qt for Python

為了避免多次編寫相同的代碼,可以創建 QML 組件。組件提供了定義新類型的方法,可以在其他 QML 文件中重用這種類型。

QML 組件就像一個黑盒,通過屬性、信號和函數與外部世界進行交互,通常在它自己的 QML 文件中定義。組件的文件名必須總是以大寫字母開頭。

// Cell.qml
import QtQuick 2.0


Item {
    id: container

    property alias cellColor: rectangle.color


    signal clicked(cellColor: color)


    width: 40; height: 25



    Rectangle {
        id: rectangle
        border.color: "white"
        anchors.fill: parent
    }



    MouseArea {
        anchors.fill: parent
        onClicked: container.clicked(container.cellColor)
    }

}

組件的根類型是帶有 id 容器的 Item。
Item 是 QML 中最基本的視覺類型,通常用作其他類型的容器。

聲明 cellColor 屬性。這個屬性可以從組件外部訪問,這允許我們用不同的顏色實例化單元格。這個屬性只是現有屬性的別名—組成單元格的矩形的顏色(參見 Property Binding)。

的組件也有一個信號,調用 click 時帶有一個類型為 colorcellColor 參數。稍后,將使用這個信號來更改主 QML 文件中的文本的顏色。

Cell 組件基本上是帶有 id 的彩色矩形。

anchors.fill 屬性是設置可視類型大小的方便方法。在這種情況下,矩形的大小將與其父矩形相同。

為了在單擊單元格時改變文本的顏色,創建 MouseArea 類型,其大小與其父單元格相同。

MouseArea 定義了稱為 clicked 的信號。當這個信號被觸發時,我們想要發出我們自己的點擊信號,并將顏色作為參數。

下面這 main QML 中使用 Cell

import QtQuick 2.0

Rectangle {
    id: page
    width: 320; height: 480
    color: "lightgray"

    Text {
        id: helloText
        text: "Hello world!"
        y: 30
        anchors.horizontalCenter: page.horizontalCenter
        font.pointSize: 24; font.bold: true
    }

    Grid {
        id: colorPicker
        x: 4; anchors.bottom: page.bottom; anchors.bottomMargin: 4
        rows: 2; columns: 3; spacing: 3


        Cell { cellColor: "red"; onClicked: helloText.color = cellColor }
        Cell { cellColor: "green"; onClicked: helloText.color = cellColor }
        Cell { cellColor: "blue"; onClicked: helloText.color = cellColor }
        Cell { cellColor: "yellow"; onClicked: helloText.color = cellColor }
        Cell { cellColor: "steelblue"; onClicked: helloText.color = cellColor }
        Cell { cellColor: "black"; onClicked: helloText.color = cellColor }
    }
}

當單元格的點擊信號被觸發時,我們希望將文本的顏色設置為作為參數傳遞的 cellColor??梢酝ㄟ^名為“onSignalName”的屬性對組件的任何信號做出反應(參見 Signal Attributes)。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 參考:QML Tutorial - Qt for Python[https://doc.qt.io/qtforpy...
    水之心閱讀 310評論 0 0
  • QML 性能上的注意事項和建議 趙者也[http://www.lxweimin.com/u/7b2ff27d6fd...
    趙者也閱讀 16,169評論 1 11
  • 組件(Component) 組件其實和其它編程語言中的宏,函數,類,結構體等功能差不多,就是代碼復用。作為程序員,...
    Linux專欄閱讀 1,866評論 0 0
  • 界面 主窗口界面設計 標題欄:直接設Window-Title屬性;Window-icon屬性可加圖標。底部狀態欄:...
    碼園老農閱讀 3,799評論 1 13
  • 在UI應用程序中,我們常常要處理鼠標事件,一個MouseArea就可以搞定許多事情。MouseArea本身是不可見...
    felixfeihu閱讀 4,660評論 0 1