0

QtScript スクリプトの値の検証に問題がありました。バリデータ関数は次のようになります。

function isValueInvalid(value) {
    return typeof value=="undefined" || value == null || value == "" || value == "X";
}

私の設定では、文字列"X"も無効な値です。値は、次のようにオブジェクトに追加されます。

someQtscriptValue.setProperty(name, myQtScriptEngine.newVariant(someQVariant));

問題は、文字列として変換さ"undefined"れる値が常にtypeofチェックを通過していたことです。そこで、テスト デバッグ出力を追加しました。someQtscriptValueスクリプト全体を印刷しました:

// This is qtscript code:
print("Validating row "+JSON.stringify(someQtscriptValue));

そして結果は紛らわしいです (短くすると、すべて同じように見えます):

Validating row {"SJZ_A":{},"SJZ_B":{},"SJZ_C":{},"SJZ_D":{},"SJZ_E":{}}

また、各値に関する情報を出力することにしました。

var propName = "name of one of the properties";
var isValid = !isValueInvalidCEPS(someQtscriptValue[propName]);
print("someQtscriptValue[\""+propName+"\"] = "+someQtscriptValue[propName]+"  ("+(isValid?"valid":"invalid")+") type="+(typeof someQtscriptValue[propName]));

そして、これはさらに驚くべきことです:

someQtscriptValue["name1"] = ULSE  (valid) type=object
someQtscriptValue["name2"] = 22  (valid) type=object
someQtscriptValue["name3"] = undefined  (valid) type=object

どうやら、 「未定義」の値を含むすべての値がオブジェクトとして型を持っていたため、それから作成QScriptValueするQVariantとオブジェクトのように動作します。

QVariants から QScript 値を作成する正しい方法は何ですか?

4

1 に答える 1