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 値を作成する正しい方法は何ですか?