本文整理汇总了C++中QScriptValueImpl::put方法的典型用法代码示例。如果您正苦于以下问题:C++ QScriptValueImpl::put方法的具体用法?C++ QScriptValueImpl::put怎么用?C++ QScriptValueImpl::put使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QScriptValueImpl
的用法示例。
在下文中一共展示了QScriptValueImpl::put方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: setProperty
//.........这里部分代码省略.........
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);
}
}
}
}
} else {
// property does not exist
if (!value.isValid())
return; // don't create property for invalid value
createMember(nameId, &member, flags & ~QScript::Member::InternalRange);
base = *this;
}
base.put(member, value);
}