如何将Component属性设置为undefined?

时间:2017-07-23 16:13:37

标签: qt properties qml qtquick2 qqmlcomponent

我有一个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
 的更新
正如您在示例代码中看到的,我希望在完成动画后分配sourceComponent loader。所以我需要属性才能正常而不是alias

2 个答案:

答案 0 :(得分:0)

Loader文档说:

  

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

因此,您只需将其source属性设置为空字符串即可。

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

property alias sourceComponent: myLoader.sourceComponent 

答案 1 :(得分:0)

您可以使用this issue来实现此目标。

  

property Component sourceComponent

不要将private readonly ApplicationDbContext _context; public OrderController(ApplicationDbContext context) { _context = context; } 定义为sourceComponent,而是将其定义为Component。示例:

var

将此sourceComponent分配给Loader sourceComponent。

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