本文整理汇总了C++中QScriptValueImpl::get方法的典型用法代码示例。如果您正苦于以下问题:C++ QScriptValueImpl::get方法的具体用法?C++ QScriptValueImpl::get怎么用?C++ QScriptValueImpl::get使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QScriptValueImpl
的用法示例。
在下文中一共展示了QScriptValueImpl::get方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: method_propertyIsEnumerable
QScriptValueImpl Object::method_propertyIsEnumerable(QScriptContextPrivate *context, QScriptEnginePrivate *eng, QScriptClassInfo *)
{
bool result = false;
if (context->thisObject().isObject() && (context->argumentCount() > 0)) {
QScriptValueImpl arg = context->argument(0);
QScriptNameIdImpl *id = 0;
if (arg.isString())
id = arg.stringValue();
if (! id || ! id->unique) {
QString str = arg.toString();
id = eng->nameId(str);
}
QScript::Member member;
QScriptValueImpl base;
QScriptValueImpl self = context->thisObject();
if (self.resolve(id, &member, &base, QScriptValue::ResolveLocal, QScript::Read)) {
result = ! member.dontEnum();
if (result) {
QScriptValueImpl tmp;
base.get(member, &tmp);
result = tmp.isValid();
}
}
}
return (QScriptValueImpl(result));
}
示例2: hasPrevious
/*!
Returns true if there is at least one item behind the iterator
(i.e. the iterator is \e not at the front of the property sequence);
otherwise returns false.
\sa previous(), hasNext()
*/
bool QScriptValueIterator::hasPrevious() const
{
Q_D(const QScriptValueIterator);
if ((d->nextIndex != -1) && !d->forward)
return true;
if (!d->object.isObject())
return false;
QScriptValueImpl v = QScriptValuePrivate::valueOf(d->object);
int i = d->index;
if ((i != -1) && d->forward)
++i;
bool found = false;
while (! found && --i >= 0) {
QScript::Member member;
v.member(i, &member);
found = member.isValid();
if (found) {
QScriptValueImpl vv;
v.get(member, &vv);
found = vv.isValid();
}
}
QScriptValueIteratorPrivate *that;
that = const_cast<QScriptValueIteratorPrivate*>(d);
if (found) {
that->forward = false;
that->nextIndex = i;
return true;
} else {
that->nextIndex = -1;
return false;
}
}
示例3: hasNext
/*!
Returns true if there is at least one item ahead of the iterator
(i.e. the iterator is \e not at the back of the property sequence);
otherwise returns false.
\sa next(), hasPrevious()
*/
bool QScriptValueIterator::hasNext() const
{
Q_D(const QScriptValueIterator);
if ((d->nextIndex != -1) && d->forward)
return true;
if (!d->object.isObject())
return false;
QScriptValueImpl v = QScriptValuePrivate::valueOf(d->object);
int i = d->index;
if ((i != -1) && !d->forward)
--i;
int count = v.memberCount();
bool found = false;
while (! found && ++i < count) {
QScript::Member member;
v.member(i, &member);
found = member.isValid();
if (found && (member.isObjectProperty() || v.isArray())) {
QScriptValueImpl vv;
v.get(member, &vv);
found = vv.isValid();
}
}
QScriptValueIteratorPrivate *that;
that = const_cast<QScriptValueIteratorPrivate*>(d);
if (found) {
that->forward = true;
that->nextIndex = i;
return true;
} else {
that->nextIndex = -1;
return false;
}
}
示例4: setProperty
void QScriptValueImpl::setProperty(QScriptNameIdImpl *nameId,
const QScriptValueImpl &value,
const QScriptValue::PropertyFlags &flags)
{
if (!isObject())
return;
QScriptValueImpl base;
QScript::Member member;
QScriptValue::ResolveFlags mode = QScriptValue::ResolveLocal;
// if we are not setting a setter or getter, look in prototype too
if (!(flags & (QScriptValue::PropertyGetter | QScriptValue::PropertySetter)))
mode |= QScriptValue::ResolvePrototype;
if (resolve(nameId, &member, &base, mode, QScript::ReadWrite)) {
// we resolved an existing property with that name
if (flags & (QScriptValue::PropertyGetter | QScriptValue::PropertySetter)) {
// setting the getter or setter of a property in this object
if (member.isNativeProperty()) {
if (value.isValid()) {
qWarning("QScriptValue::setProperty() failed: "
"cannot set getter or setter of native property `%s'",
qPrintable(nameId->s));
}
return;
}
if (member.isSetter()) {
// the property we resolved is a setter
if (!(flags & QScriptValue::PropertySetter) && !member.isGetter()) {
// find the getter, if not, create one
if (!m_object_value->findGetter(&member)) {
if (!value.isValid())
return; // don't create property for invalid value
createMember(nameId, &member, flags);
}
}
} else if (member.isGetter()) {
// the property we resolved is a getter
if (!(flags & QScriptValue::PropertyGetter)) {
// find the setter, if not, create one
if (!m_object_value->findSetter(&member)) {
if (!value.isValid())
return; // don't create property for invalid value
createMember(nameId, &member, flags);
}
}
} else {
// the property is a normal property -- change the flags
uint newFlags = flags & ~QScript::Member::InternalRange;
newFlags |= QScript::Member::ObjectProperty;
member.resetFlags(newFlags);
base.m_object_value->m_members[member.id()].resetFlags(newFlags);
}
Q_ASSERT(member.isValid());
if (!value.isValid()) {
// remove the property
removeMember(member);
return;
}
} else {
// setting the value
if (member.isGetterOrSetter()) {
// call the setter
QScriptValueImpl setter;
if (member.isObjectProperty() && !member.isSetter()) {
if (!base.m_object_value->findSetter(&member)) {
qWarning("QScriptValue::setProperty() failed: "
"property '%s' has a getter but no setter",
qPrintable(nameId->s));
return;
}
}
base.get(member, &setter);
setter.call(*this, QScriptValueImplList() << value);
return;
} else {
if (base.m_object_value != m_object_value) {
if (!value.isValid())
return; // don't create property for invalid value
createMember(nameId, &member, flags);
base = *this;
} else {
if (!value.isValid()) {
// remove the property
removeMember(member);
return;
}
}
if (flags != QScriptValue::KeepExistingFlags) {
// change flags
if (member.isNativeProperty()) {
qWarning("QScriptValue::setProperty(%s): "
"cannot change flags of a native property",
qPrintable(nameId->s));
} else {
uint newFlags = member.flags() & QScript::Member::InternalRange;
newFlags |= flags & ~QScript::Member::InternalRange;
base.m_object_value->m_members[member.id()].resetFlags(newFlags);
}
//.........这里部分代码省略.........