【问题标题】:What is best way to load either Rectangle(drawn by code) or Image in Qml?在 Qml 中加载矩形(由代码绘制)或图像的最佳方法是什么?
【发布时间】:2016-10-02 23:09:36
【问题描述】:

我有一个带有一个“矩形”和一个“图像”的 Qml 文件。我想根据 my.cpp 文件中设置的属性加载任何一个。

请帮我找到一个最好的方法来做到这一点。

实际上,我可以想到两种可能的方法来做同样的事情: 1)第一种方法是在各自的 QML 中定义元素(图像和矩形),并从 my.cpp 文件控制它们的可见性。我可以有一个属性,这个属性可以控制两者中任何一个的可见性。这种方法的缺点是即使只需要显示一个元素,也会创建两个。

2) 第二种方法是我们可以有两个组件,并根据 my.cpp 中设置的属性使用“Loader”加载其中一个。

例如:

' 零件 { 编号:img 图片 { 编号:我的图像 来源:currentdir + "/img_production/Separator/myImage.png" 宽度:10 身高:79 } }

Component
{
    id:rect
    Rectangle
    {
        id:re
        height: 82
        width: 10
        color: "#FFFFFF"
    }
}
Loader
{
    id: itemDisplay
    sourceComponent: style.flag? rect : img
    anchors.fill: parent.fill
}

' 寻求一些专家的建议。

PS:style.flag 是 my.cpp 为 Qml 设置的属性。

【问题讨论】:

    标签: qt qml


    【解决方案1】:

    在这种情况下,两个项目都是简单的基本类型,我会去改变可见性。

    直接实例化这两个元素可以更容易地在绑定中引用它们或绑定到它们的属性。 这也意味着它们的分配只发生一次,减少了内存碎片的机会

    如果您担心在显示矩形时图像会占用太多内存,您仍然可以使图像的源属性依赖于可见性值,即在不显示图像元素时卸载图像。

    【讨论】:

    • 谢谢凯文。我会试试你的建议。它似乎也很容易实现。但是,我想在这里了解如果我选择使用加载器而不是可见性更改会怎样。我的意思是为什么可见性更改方法比在 Qml 中使用加载器更好?我是 Qml 的新学习者。请原谅我问了这样一个基本的(..ok silly)问题。只是出于好奇,我想知道解决我的问题的其他可能方法,如果你有的话。
    • 加载器处理起来更复杂,因为您无法像直接实例化的那样访问加载的项目。例如。没有 id,没有“范围”括号,您可以在其中编写属性绑定或信号处理程序。 Loader 方法的优势在于它允许延迟/按需加载,这可以加快初始启动时间并控制内存需求。在您的情况下,后者无关紧要,因为 Loader 本身是一个元素,而您将加载另一个元素,即总共两个,与可见性更改相同
    • 非常感谢凯文。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多