首页 文章

将属性传递给QML Loader创建的对象

提问于
浏览
3

我有一个QML Loader 加载另一个qml

Loader { id: gaugeLoader }

PieMenu {
    id: pieMenu

    MenuItem {
        text: "Add Bar Gauge"
        onTriggered: gaugeLoader.source = "qrc:/Gauges/horizontalBarGauge.qml"
    }
    MenuItem {
        text: "Action 2"
        onTriggered: print("Action 2")
    }
    MenuItem {
        text: "Action 3"
        onTriggered: print("Action 3")
    }
}

如何传递参数来设置加载的qml的 IDwidthheight 等?

1 回答

  • 4

    Method 1: Loader::setSource

    您可以使用Loader::setSource(url source, object properties)函数在构造期间设置属性,例如:

    gaugeLoader.setSource("qrc:/Gauges/horizontalBarGauge.qml", {"width": 100, "height": 100});
    

    请注意,您不能以这种方式设置id attribute,因为它不是普通的属性属性:

    创建对象实例后,无法更改其id属性的值 . 虽然它看起来像普通的属性,但id属性不是普通的属性属性,并且特殊的语义适用于它;例如,在上面的示例中无法访问myTextInput.id .

    相反,您可以创建属性别名,如下所示:

    property alias gauge: gaugeLoader.item
    

    相对于Loader对象的 Method 2: 几何

    或者,您可以在 Loader 对象上设置 widthheight ,并在 horizontalBarGauge.qml 中指定相对于其父对象的宽度和高度,即 Loader 对象 .

    property alias gauge: gaugeLoader.item
    Loader { 
        id: gaugeLoader 
        width: 100
        height: 100
    }
    

    QRC:/Gauges/horizontalBarGauge.qml:

    Item {
        anchors.fill: parent
    }
    

相关问题