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

1

因此,就 QVariants 而言,这种方法工作得很好:

QScriptEngine::toScriptValue

QVariant 可以传递给它。如果QVariant无效,它将作为undefinedQTscript 值结束。数值 qvariants 转换为数字,字符串转换为字符串。

于 2017-04-15T19:45:39.947 回答