美文网首页
QML 组件

QML 组件

作者: 水之心 | 来源:发表于2022-08-12 22:31 被阅读0次

    参考: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 组件

          本文链接:https://www.haomeiwen.com/subject/goufgrtx.html