如何访问通过Loader加载的qml页面的公共属性?

时间:2014-11-27 10:18:29

标签: qt qml loader qt-quick

AA.qml

Item
{
    id:             drawLinesOnC

    property string  lineColour
    property int     lineDrawingSourceType
    property variant startEndPointArray

}

main.qml

Loader
{
   id:     drawLineLoaderA
   source: "AA.qml"
}

-

如何访问通过Loader AA.qml加载的drawLineLoaderA页面的公共属性?

2 个答案:

答案 0 :(得分:4)

解决方案如下:

drawLineLoaderA.source = "DrawLineLoader.qml"
if (drawLineLoaderA.status == Loader.Ready)
{
    if (drawLineLoaderA.item && drawLineLoaderA.item.lineColour)
    {
        drawLineLoaderA.item.lineColour            = "black"
        drawLineLoaderA.item.lineDrawingSourceType = 2 
    }
}

答案 1 :(得分:1)

除了@TheIndependentAquarius所说的,你可以在你的装载机中声明相应类型的属性:

Loader {
    id: drawLineLoaderA
    readonly property AA aa: item
    source: "AA.qml"
}

然后像这样使用它:

if (drawLineLoaderA.aa) {
    drawLineLoaderA.aa.color = "black"
}

现在你明确表示你处理AA类型的项目,而不是其他项目,并且你将自动完成已加载项目的属性作为奖励。


注1 :加载项的属性配置应该在AA.qml本身(默认值)或在Loader的onLoaded处理程序中完成,如@troy所建议的那样。

注意2 :在您的AA.qml中,您声明了property string lineColour。您可能对color QML类型感兴趣。如果您声明property color lineColour,QML将检查您是否为此属性分配了有效值。此外,color值在传递给C ++时会自动转换为QColor(当然,当从C ++传递时,来自 QColor)。