【问题标题】:How to access the public properties of a qml page loaded through a Loader?如何访问通过 Loader 加载的 qml 页面的公共属性?
【发布时间】:2014-11-27 10:18:29
【问题描述】:

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

【问题讨论】:

    标签: qt qml loader qt-quick


    【解决方案1】:

    解决方法如下:

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

    【讨论】:

    • 我建议在这里更加小心。 首先,在您的加载器的onLoaded 中完成所有分配。 第二,通过if (drawLineLoaderA.item && drawLineLoaderA.item.lineColour) { ... }重新检查您的项目是否具有各自的属性。
    • 您可以将其添加到您的答案中
    【解决方案2】:

    除了@TheIndependentAquarius说的,你还可以在你的loader中声明对应类型的属性:

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

    然后像这样使用它:

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

    现在您清楚地声明您处理的是 AA 类型的项目,而不是其他类型的项目,并且您将获得加载项目属性的自动完成作为奖励。


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

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

    【讨论】:

      猜你喜欢
      • 2017-07-04
      • 2020-07-15
      • 1970-01-01
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多