【问题标题】:How can i set a Component property to undefined?如何将组件属性设置为未定义?
【发布时间】:2017-07-23 16:13:37
【问题描述】:

我有一个Component 类型的属性。

import QtQuick 2.6

Item {
    id: root
    property Component sourceComponent
    /* ........ */
    Loader {
        anchors.fill: parent
        id: myLoader
    }
    SequentialAnimation {
        id: hideLoader
        NumberAnimation {
            target: root
            property: "y"
            duration: 1000; from: 0; to: -root.height
        }
        onStopped: root.sourceComponent = undefined;  //<-- Error: Cannot assign [undefined] to QQmlComponent*
    }
}

每当我想将其设置为 undefined 时,它都会引发错误。如何将其设置为 undefined
更新
正如您在我的示例代码中看到的,我想在完成动画后分配loadersourceComponent。所以我需要属性正常而不是alias

【问题讨论】:

  • 为什么要赋值 undefined?
  • 尝试分配空值。
  • 如果要卸载加载器,可以设置myLoader.active = false
  • @eyllanesc 因为我想从外部卸载装载机,就像装载机一样
  • @eyllanesc Loader 需要设置为undefined。分配null 不会导致卸载。

标签: qt properties qml qtquick2 qqmlcomponent


【解决方案1】:

Loader 文档说:

如果sourcesourceComponent 发生更改,则任何先前实例化的项目都将被销毁。将source 设置为空字符串或将sourceComponent 设置为undefined 会破坏当前加载的对象,释放资源并使Loader 为空。

因此,您可以简单地将其source 属性设置为空字符串。

在您的情况下,您需要一个名为 sourceComponentalias 属性,而不是普通属性。

property alias sourceComponent: myLoader.sourceComponent 

【讨论】:

  • 谢谢。您可以在我的示例代码中看到动画。我想在动画完成后分配loadersourceComponent。所以我需要把它作为一个正常的属性,并在适当的时候影响它。
  • @S.M.Mousavi 该动画只对rooty 属性起作用,看不到与rootsourceComponent 相关的任何内容。
  • 您可以看到处理onStopped 信号的hideLoader 动画的最后一行。我会在一些地方运行这个动画。我还想实现和自定义组件(上面的代码作为示例),它可以将任何值作为sourceComponent 处理为常规加载器。
  • @S.M.Mousavi 请注意,取消设置 root.sourceComponent 您并没有取消设置该加载程序的设置,因此这可能会导致意外行为。另一方面,我看不出alias 属性有什么问题。这样,取消设置 root.sourceComponent 也会取消设置 mylaoder.sourceComponent。但你不会。
【解决方案2】:

您可以使用dynamic object creation 来实现此目的。

属性组件源组件

不要将sourceComponent 定义为Component,而是将其定义为var。示例:

property var sourceComponent = Qt.createComponent("YourCustomImplementation.qml");

将此 sourceComponent 分配给您的 Loader sourceComponent。

myLoader.sourceComponent = root.sourceComponent

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 2023-04-08
    • 2012-06-24
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    相关资源
    最近更新 更多