如何将组件属性设置为未定义?

Posted

技术标签:

【中文标题】如何将组件属性设置为未定义?【英文标题】: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 不会导致卸载。 【参考方案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

【讨论】:

以上是关于如何将组件属性设置为未定义?的主要内容,如果未能解决你的问题,请参考以下文章

反应:作为道具的数组显示为未定义

在我取消选中收音机并将所有变量设置为未定义后,我的弹出元素将再次出现

如何在玩笑中将 process.env 设置为未定义

为啥 Firebug 不为未定义的属性显示“未捕获的类型错误”?

NodeJS JSON 文件的属性在编辑属性后重置为未定义

this.props 在 React 组件中的箭头函数中显示为未定义