本文整理汇总了C++中QScriptEngine::toObject方法的典型用法代码示例。如果您正苦于以下问题:C++ QScriptEngine::toObject方法的具体用法?C++ QScriptEngine::toObject怎么用?C++ QScriptEngine::toObject使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QScriptEngine
的用法示例。
在下文中一共展示了QScriptEngine::toObject方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: iterateArray
void tst_QScriptValueIterator::iterateArray()
{
QFETCH(QStringList, propertyNames);
QFETCH(QStringList, propertyValues);
QScriptEngine engine;
QScriptValue array = engine.newArray();
// Fill the array
for (int i = 0; i < propertyNames.size(); ++i) {
array.setProperty(propertyNames.at(i), propertyValues.at(i));
}
// Iterate thru array properties. Note that the QScriptValueIterator doesn't guarantee
// any order on the iteration!
int length = array.property("length").toInt32();
QCOMPARE(length, propertyNames.size());
bool iteratedThruLength = false;
QHash<QString, QScriptValue> arrayProperties;
QScriptValueIterator it(array);
// Iterate forward
while (it.hasNext()) {
it.next();
const QString name = it.name();
if (name == QString::fromLatin1("length")) {
QVERIFY(it.value().isNumber());
QCOMPARE(it.value().toInt32(), length);
QCOMPARE(it.flags(), QScriptValue::SkipInEnumeration | QScriptValue::Undeletable);
QVERIFY2(!iteratedThruLength, "'length' appeared more than once during iteration.");
iteratedThruLength = true;
continue;
}
// Storing the properties we iterate in a hash to compare with test data.
QVERIFY2(!arrayProperties.contains(name), "property appeared more than once during iteration.");
arrayProperties.insert(name, it.value());
QCOMPARE(it.flags(), array.propertyFlags(name));
QVERIFY(it.value().strictlyEquals(array.property(name)));
}
// Verify properties
QVERIFY(iteratedThruLength);
QCOMPARE(arrayProperties.size(), propertyNames.size());
for (int i = 0; i < propertyNames.size(); ++i) {
QVERIFY(arrayProperties.contains(propertyNames.at(i)));
QCOMPARE(arrayProperties.value(propertyNames.at(i)).toString(), propertyValues.at(i));
}
// Iterate backwards
arrayProperties.clear();
iteratedThruLength = false;
it.toBack();
while (it.hasPrevious()) {
it.previous();
const QString name = it.name();
if (name == QString::fromLatin1("length")) {
QVERIFY(it.value().isNumber());
QCOMPARE(it.value().toInt32(), length);
QCOMPARE(it.flags(), QScriptValue::SkipInEnumeration | QScriptValue::Undeletable);
QVERIFY2(!iteratedThruLength, "'length' appeared more than once during iteration.");
iteratedThruLength = true;
continue;
}
// Storing the properties we iterate in a hash to compare with test data.
QVERIFY2(!arrayProperties.contains(name), "property appeared more than once during iteration.");
arrayProperties.insert(name, it.value());
QCOMPARE(it.flags(), array.propertyFlags(name));
QVERIFY(it.value().strictlyEquals(array.property(name)));
}
// Verify properties
QVERIFY(iteratedThruLength);
QCOMPARE(arrayProperties.size(), propertyNames.size());
for (int i = 0; i < propertyNames.size(); ++i) {
QVERIFY(arrayProperties.contains(propertyNames.at(i)));
QCOMPARE(arrayProperties.value(propertyNames.at(i)).toString(), propertyValues.at(i));
}
// ### Do we still need this test?
// Forward test again but as object
arrayProperties.clear();
iteratedThruLength = false;
QScriptValue arrayObject = engine.toObject(array);
QScriptValueIterator it2(arrayObject);
while (it2.hasNext()) {
it2.next();
const QString name = it2.name();
if (name == QString::fromLatin1("length")) {
QVERIFY(it2.value().isNumber());
QCOMPARE(it2.value().toInt32(), length);
QCOMPARE(it2.flags(), QScriptValue::SkipInEnumeration | QScriptValue::Undeletable);
QVERIFY2(!iteratedThruLength, "'length' appeared more than once during iteration.");
//.........这里部分代码省略.........