web-dev-qa-db-ja.com

qmlでプロパティが未定義かどうかをどのように確認しますか?

Qmlでプロパティが未定義かどうかをどのように確認しますか?

これは私がやろうとしていることです:

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

試してください:text: text ? text : "default text"

"undefined"は、他の言語のNoneまたはNULLのように、何も参照していない参照の単なる文字列表現です。

===は厳密な比較演算子です。次のスレッドを読むことをお勧めします。 https://stackoverflow.com/questions/523643/difference-between-and-in-javascript

11
Kissiel
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;
        }
    }
}
5
Marcus Ottosson

未定義と比較するには、text === undefinedと記述します。 textnullの場合、これはfalseと評価されます。

値が存在するかどうかを確認する場合(つまり、undefinednullの両方を確認する場合)、ifステートメントまたは三項演算子の条件として使用します。比較の結果をブール値として保存する必要がある場合は、var textPresent = !!textを使用します(ただし、二重の!はコードを読んでいる人を混乱させるかもしれません)。

2
tonytony