2017-04-15 83 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檢查。所以我添加了測試調試輸出。我在劇本印刷整個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 

很顯然,如果我從QVariant製作QScriptValue,它的行爲就像一個對象,因爲包括「未定義」的所有值都具有類型作爲對象。

那麼從QVariants創建QScript值的正確方法是什麼?

回答

1

所以,只要QVariants而言,這種方法非常有效:

QScriptEngine::toScriptValue

的QVariant可以傳遞給它。如果QVariant無效,它將以undefined QTscript值結束。數字變量將數字和字符串轉換爲字符串。

相關問題