如何将组件属性设置为未定义?
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
?更新
正如您在我的示例代码中看到的,我想在完成动画后分配loader
的sourceComponent
。所以我需要属性正常而不是alias
。
【问题讨论】:
为什么要赋值 undefined? 尝试分配空值。 如果要卸载加载器,可以设置myLoader.active = false
。
@eyllanesc 因为我想从外部卸载装载机,就像装载机一样
@eyllanesc Loader 需要设置为undefined
。分配null
不会导致卸载。
【参考方案1】:
Loader 文档说:
如果
source
或sourceComponent
发生更改,则任何先前实例化的项目都将被销毁。将source
设置为空字符串或将sourceComponent
设置为undefined
会破坏当前加载的对象,释放资源并使Loader 为空。
因此,您可以简单地将其source
属性设置为空字符串。
在您的情况下,您需要一个名为 sourceComponent
的 alias 属性,而不是普通属性。
property alias sourceComponent: myLoader.sourceComponent
【讨论】:
谢谢。您可以在我的示例代码中看到动画。我想在动画完成后分配loader
的sourceComponent
。所以我需要把它作为一个正常的属性,并在适当的时候影响它。
@S.M.Mousavi 该动画只对root
的y
属性起作用,看不到与root
的sourceComponent
相关的任何内容。
您可以看到处理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
【讨论】:
以上是关于如何将组件属性设置为未定义?的主要内容,如果未能解决你的问题,请参考以下文章
在我取消选中收音机并将所有变量设置为未定义后,我的弹出元素将再次出现