如何检查 qml 中的属性是否未定义?

如何检查 qml 中的属性是否未定义?

如何检查 qml 中的属性是否未定义?

这就是我想做的事情:

Button {
    id: myButton
    text: if (text === "undefined"){"default text"}
}

答案1

尝试: text: text ? text : "default text"

"undefined"仅仅是一个引用的字符串表示,不引用任何东西,就像NoneNULL其他语言中的一样。

===是严格的比较运算符,你可能需要阅读这个帖子:https://stackoverflow.com/questions/523643/difference-between-and-in-javascript

答案2

import QtQuick 2.3
import QtQuick.Controls 1.2

Button {
    id: myButton
    text: text ? text : "default text"
}

这个答案对我来说是一个警告。

QML Button: Binding loop detected for property "text"

更改textmodelText则会引发错误。

ReferenceError: modelText is not defined

这会停止 Javascript 的执行;也就是说,下一行不会被调用。

通过 Javascript

通过 Javascript 设置时也会发生同样的情况,但相当繁琐。

import QtQuick 2.3
import QtQuick.Controls 1.2

Button {
    id: myButton
    text: "default text"

    Component.onCompleted: {
        if (modelText !== "undefined") {
            myButton.text = modelText;
        }
    }
}

使用typeof

操作typeof员消除错误并按预期工作。

import QtQuick 2.3
import QtQuick.Controls 1.2

Button {
    id: myButton
    text: "default text"

    Component.onCompleted: {
        if (typeof modelText !== "undefined") {
            myButton.text = modelText;
        }
    }
}

答案3

要与未定义进行比较,请写入。如果为,text === undefined则计算结果为 false 。textnull

如果您想要检查值是否存在(即检查undefinednull),请将其用作 if 语句或三元运算符中的条件。如果您需要将比较结果存储为布尔值,请使用var textPresent = !!text(尽管 double!可能会让阅读代码的人感到困惑)。

相关内容