2017-04-15 14 views
0

QtScriptスクリプトで値の検証に問題がありました。バリデータ関数は次のようになります。QVariantをネイティブのQtScriptValue(数値、文字列など)に変換する方法

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

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

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

今事は文字列として"undefined"に変換値が常にtypeofチェックを渡したということです。そこで、テストデバッグ出力を追加しました。

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

、結果は混乱している(短く、それはすべて同じに見えた):私は、スクリプトの中で全体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 

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

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

答えて

1

だから、限りQVariantsが懸念しているとして、この方法ではうまく動作します:

QScriptEngine::toScriptValue

QVariantがそれに渡すことができます。 QVariantが無効な場合は、undefined QTscript値になります。数値のqvariantsは数字と文字列として文字列として扱われます。

関連する問題