本文整理汇总了C++中QScriptValue::isNumber方法的典型用法代码示例。如果您正苦于以下问题:C++ QScriptValue::isNumber方法的具体用法?C++ QScriptValue::isNumber怎么用?C++ QScriptValue::isNumber使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QScriptValue
的用法示例。
在下文中一共展示了QScriptValue::isNumber方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: inheritActivationAndThisObject
void tst_QScriptContext::inheritActivationAndThisObject()
{
QScriptEngine eng;
eng.globalObject().setProperty("myEval", eng.newFunction(myEval));
{
QScriptValue ret = eng.evaluate("var a = 123; myEval('a')");
QVERIFY(ret.isNumber());
QCOMPARE(ret.toInt32(), 123);
}
{
QScriptValue ret = eng.evaluate("(function() { return myEval('this'); }).call(Number)");
QVERIFY(ret.isFunction());
QVERIFY(ret.equals(eng.globalObject().property("Number")));
}
{
QScriptValue ret = eng.evaluate("(function(a) { return myEval('a'); })(123)");
QVERIFY(ret.isNumber());
QCOMPARE(ret.toInt32(), 123);
}
// QT-2219
{
eng.globalObject().setProperty("a", 123);
QScriptValue ret = eng.evaluate("(function() { myEval('var a = 456'); return a; })()");
QVERIFY(ret.isNumber());
QCOMPARE(ret.toInt32(), 456);
QEXPECT_FAIL("", "QT-2219: Wrong activation object is returned from native function's parent context", Continue);
QVERIFY(eng.globalObject().property("a").strictlyEquals(123));
}
}
示例2: qColorFromScriptValue
void qColorFromScriptValue(const QScriptValue& object, QColor& color) {
if (object.isNumber()) {
color.setRgb(object.toUInt32());
} else if (object.isString()) {
color.setNamedColor(object.toString());
} else {
QScriptValue alphaValue = object.property("alpha");
color.setRgb(object.property("red").toInt32(), object.property("green").toInt32(), object.property("blue").toInt32(),
alphaValue.isNumber() ? alphaValue.toInt32() : 255);
}
}
示例3: animVariantMapFromScriptValue
void AnimVariantMap::animVariantMapFromScriptValue(const QScriptValue& source) {
if (QThread::currentThread() != source.engine()->thread()) {
qCWarning(animation) << "Cannot examine Javacript object from non-script thread" << QThread::currentThread();
Q_ASSERT(false);
return;
}
// POTENTIAL OPTIMIZATION: cache the types we've seen. I.e, keep a dictionary mapping property names to an enumeration of types.
// Whenever we identify a new outbound type in animVariantMapToScriptValue above, or a new inbound type in the code that follows here,
// we would enter it into the dictionary. Then switch on that type here, with the code that follow being executed only if
// the type is not known. One problem with that is that there is no checking that two different script use the same name differently.
QScriptValueIterator property(source);
// Note: QScriptValueIterator iterates only over source's own properties. It does not follow the prototype chain.
while (property.hasNext()) {
property.next();
QScriptValue value = property.value();
if (value.isBool()) {
set(property.name(), value.toBool());
} else if (value.isString()) {
set(property.name(), value.toString());
} else if (value.isNumber()) {
int asInteger = value.toInt32();
float asFloat = value.toNumber();
if (asInteger == asFloat) {
set(property.name(), asInteger);
} else {
set(property.name(), asFloat);
}
} else { // Try to get x,y,z and possibly w
if (value.isObject()) {
QScriptValue x = value.property("x");
if (x.isNumber()) {
QScriptValue y = value.property("y");
if (y.isNumber()) {
QScriptValue z = value.property("z");
if (z.isNumber()) {
QScriptValue w = value.property("w");
if (w.isNumber()) {
set(property.name(), glm::quat(w.toNumber(), x.toNumber(), y.toNumber(), z.toNumber()));
} else {
set(property.name(), glm::vec3(x.toNumber(), y.toNumber(), z.toNumber()));
}
continue; // we got either a vector or quaternion object, so don't fall through to warning
}
}
}
}
qCWarning(animation) << "Ignoring unrecognized data" << value.toString() << "for animation property" << property.name();
Q_ASSERT(false);
}
}
}
示例4: constructor
//---------------------------------------------------------------------------------------
QScriptValue JSQChar::constructor( QScriptContext* ctx, QScriptEngine* eng ) {
if( !ctx->isCalledAsConstructor() ) {
return ctx->throwError( "MarcSubField must be called as a constructor with the new operand." );
};
switch( ctx->argumentCount() ) {
case 0:
return eng->newQObject( ctx->thisObject(), new JSQChar(), QScriptEngine::ScriptOwnership );
case 1:
{
QScriptValue arg = ctx->argument( 0 );
if( arg.isNumber() ) {
return eng->newQObject( ctx->thisObject(), new JSQChar( QSharedPointer<QChar>( new QChar( arg.toInt32() ) ) ), QScriptEngine::ScriptOwnership );
}
else {
return ctx->throwError( "Wrong data type of argument." );
}
}
default:
return ctx->throwError( "Wrong number of arguments." );
}
}
示例5: TextImportDialog_script_changeFontSize
QScriptValue TextImportDialog_script_changeFontSize(QScriptContext *context, QScriptEngine */*engine*/)
{
QObject *obj = context->argument(0).toQObject();
if(!obj)
{
qDebug() << "TextImportDialog_script_changeFontSize(textbox,fontSize): Must give Slide (QObject) as first argument";
return QScriptValue(QScriptValue::NullValue);
}
TextBoxItem *text = dynamic_cast<TextBoxItem*>(obj);
if(!text)
{
qDebug() << "TextImportDialog_script_changeFontSize(textbox,fontSize): First argument is not a Slide";
return QScriptValue(QScriptValue::NullValue);
}
QScriptValue fontSizeVal = context->argument(1);
if(!fontSizeVal.isNumber())
{
qDebug() << "TextImportDialog_script_changeFontSize(textbox,fontSize): Second argument is not a number";
return QScriptValue(QScriptValue::NullValue);
}
double size = (double)fontSizeVal.toNumber();
text->changeFontSize(size);
return QScriptValue(text->findFontSize());
}
示例6: qobjectAsActivationObject
void tst_QScriptContext::qobjectAsActivationObject()
{
QScriptEngine eng;
QObject object;
QScriptValue scriptObject = eng.newQObject(&object);
QScriptContext *ctx = eng.pushContext();
ctx->setActivationObject(scriptObject);
QVERIFY(ctx->activationObject().equals(scriptObject));
QVERIFY(!scriptObject.property("foo").isValid());
eng.evaluate("function foo() { return 123; }");
{
QScriptValue val = scriptObject.property("foo");
QVERIFY(val.isValid());
QVERIFY(val.isFunction());
}
QVERIFY(!eng.globalObject().property("foo").isValid());
QVERIFY(!scriptObject.property("bar").isValid());
eng.evaluate("var bar = 123");
{
QScriptValue val = scriptObject.property("bar");
QVERIFY(val.isValid());
QVERIFY(val.isNumber());
QCOMPARE(val.toInt32(), 123);
}
QVERIFY(!eng.globalObject().property("bar").isValid());
{
QScriptValue val = eng.evaluate("delete foo");
QVERIFY(val.isBool());
QVERIFY(val.toBool());
QVERIFY(!scriptObject.property("foo").isValid());
}
}
示例7: fromScriptValueEntityReference
void fromScriptValueEntityReference(const QScriptValue &obj, EntityReference &s)
{
if (obj.isString())
s.ref = obj.toString();
else
{
if (!obj.property("ref").isValid())
LogError("Can't convert QScriptValue to EntityReference! QScriptValue does not contain ref attribute!");
else
{
QScriptValue ref = obj.property("ref");
if (ref.isNull())
s.ref = ""; // Empty the reference
else if (ref.isString())
s.ref = ref.toString();
else if (ref.isQObject())
{
// If the object is an Entity, call EntityReference::Set() with it
Entity* entity = dynamic_cast<Entity*>(ref.toQObject());
s.Set(entity);
}
else if (ref.isNumber() || ref.isVariant())
s.ref = QString::number(ref.toInt32());
else
LogError("Can't convert QScriptValue to EntityReference! Ref attribute is not null, string, a number, or an entity");
}
}
}
示例8: add
QScriptValue UniversalInputDialogScript::add(const QScriptValue& def, const QScriptValue& description, const QScriptValue& id){
QWidget* w = 0;
if (def.isArray()) {
QStringList options;
QScriptValueIterator it(def);
while (it.hasNext()) {
it.next();
if (it.flags() & QScriptValue::SkipInEnumeration)
continue;
if (it.value().isString() || it.value().isNumber()) options << it.value().toString();
else engine->currentContext()->throwError("Invalid default value in array (must be string or number): "+it.value().toString());
}
w = addComboBox(ManagedProperty::fromValue(options), description.toString());
} else if (def.isBool()) {
w = addCheckBox(ManagedProperty::fromValue(def.toBool()), description.toString());
} else if (def.isNumber()) {
w = addDoubleSpinBox(ManagedProperty::fromValue(def.toNumber()), description.toString());
} else if (def.isString()) {
w = addLineEdit(ManagedProperty::fromValue(def.toString()), description.toString());
} else {
engine->currentContext()->throwError(tr("Invalid default value: %1").arg(def.toString()));
return QScriptValue();
}
if (id.isValid()) properties.last().name = id.toString();
return engine->newQObject(w);
}
示例9: createMenu
QAction *KWin::AbstractScript::scriptValueToAction(QScriptValue &value, QMenu *parent)
{
QScriptValue titleValue = value.property(QStringLiteral("text"));
QScriptValue checkableValue = value.property(QStringLiteral("checkable"));
QScriptValue checkedValue = value.property(QStringLiteral("checked"));
QScriptValue itemsValue = value.property(QStringLiteral("items"));
QScriptValue triggeredValue = value.property(QStringLiteral("triggered"));
if (!titleValue.isValid()) {
// title not specified - does not make any sense to include
return nullptr;
}
const QString title = titleValue.toString();
const bool checkable = checkableValue.isValid() && checkableValue.toBool();
const bool checked = checkable && checkedValue.isValid() && checkedValue.toBool();
// either a menu or a menu item
if (itemsValue.isValid()) {
if (!itemsValue.isArray()) {
// not an array, so cannot be a menu
return nullptr;
}
QScriptValue lengthValue = itemsValue.property(QStringLiteral("length"));
if (!lengthValue.isValid() || !lengthValue.isNumber() || lengthValue.toInteger() == 0) {
// length property missing
return nullptr;
}
return createMenu(title, itemsValue, parent);
} else if (triggeredValue.isValid()) {
// normal item
return createAction(title, checkable, checked, triggeredValue, parent);
}
return nullptr;
}
示例10: moduleProperties
QScriptValue ModuleProperties::moduleProperties(QScriptContext *context, QScriptEngine *engine,
bool oneValue)
{
if (Q_UNLIKELY(context->argumentCount() < 2)) {
return context->throwError(QScriptContext::SyntaxError,
Tr::tr("Function moduleProperties() expects 2 arguments"));
}
const QScriptValue objectWithProperties = context->thisObject();
const QScriptValue typeScriptValue = objectWithProperties.property(typeKey());
if (Q_UNLIKELY(!typeScriptValue.isString())) {
return context->throwError(QScriptContext::TypeError,
QLatin1String("Internal error: __type not set up"));
}
const QScriptValue ptrScriptValue = objectWithProperties.property(ptrKey());
if (Q_UNLIKELY(!ptrScriptValue.isNumber())) {
return context->throwError(QScriptContext::TypeError,
QLatin1String("Internal error: __internalPtr not set up"));
}
const void *ptr = reinterpret_cast<const void *>(qscriptvalue_cast<quintptr>(ptrScriptValue));
PropertyMapConstPtr properties;
const Artifact *artifact = 0;
if (typeScriptValue.toString() == productType()) {
properties = static_cast<const ResolvedProduct *>(ptr)->moduleProperties;
} else if (typeScriptValue.toString() == artifactType()) {
artifact = static_cast<const Artifact *>(ptr);
properties = artifact->properties;
} else {
return context->throwError(QScriptContext::TypeError,
QLatin1String("Internal error: invalid type"));
}
ScriptEngine * const qbsEngine = static_cast<ScriptEngine *>(engine);
const QString moduleName = context->argument(0).toString();
const QString propertyName = context->argument(1).toString();
QVariant value;
if (qbsEngine->isPropertyCacheEnabled())
value = qbsEngine->retrieveFromPropertyCache(moduleName, propertyName, oneValue,
properties);
if (!value.isValid()) {
if (oneValue)
value = PropertyFinder().propertyValue(properties->value(), moduleName, propertyName);
else
value = PropertyFinder().propertyValues(properties->value(), moduleName, propertyName);
const Property p(moduleName, propertyName, value);
if (artifact)
qbsEngine->addPropertyRequestedFromArtifact(artifact, p);
else
qbsEngine->addPropertyRequestedInScript(p);
// Cache the variant value. We must not cache the QScriptValue here, because it's a
// reference and the user might change the actual object.
if (qbsEngine->isPropertyCacheEnabled())
qbsEngine->addToPropertyCache(moduleName, propertyName, oneValue, properties, value);
}
return engine->toScriptValue(value);
}
示例11: fromScriptValue
void PointerEvent::fromScriptValue(const QScriptValue& object, PointerEvent& event) {
if (object.isObject()) {
QScriptValue type = object.property("type");
QString typeStr = type.isString() ? type.toString() : "Move";
if (typeStr == "Press") {
event._type = Press;
} else if (typeStr == "DoublePress") {
event._type = DoublePress;
} else if (typeStr == "Release") {
event._type = Release;
} else {
event._type = Move;
}
QScriptValue id = object.property("id");
event._id = id.isNumber() ? (uint32_t)id.toNumber() : 0;
glm::vec2 pos2D;
vec2FromScriptValue(object.property("pos2D"), event._pos2D);
glm::vec3 pos3D;
vec3FromScriptValue(object.property("pos3D"), event._pos3D);
glm::vec3 normal;
vec3FromScriptValue(object.property("normal"), event._normal);
glm::vec3 direction;
vec3FromScriptValue(object.property("direction"), event._direction);
QScriptValue button = object.property("button");
QString buttonStr = type.isString() ? button.toString() : "NoButtons";
if (buttonStr == "Primary") {
event._button = PrimaryButton;
} else if (buttonStr == "Secondary") {
event._button = SecondaryButton;
} else if (buttonStr == "Tertiary") {
event._button = TertiaryButton;
} else {
event._button = NoButtons;
}
bool primary = object.property("isPrimaryHeld").toBool();
bool secondary = object.property("isSecondaryHeld").toBool();
bool tertiary = object.property("isTertiaryHeld").toBool();
event._buttons = 0;
if (primary) {
event._buttons |= PrimaryButton;
}
if (secondary) {
event._buttons |= SecondaryButton;
}
if (tertiary) {
event._buttons |= TertiaryButton;
}
event._keyboardModifiers = (Qt::KeyboardModifiers)(object.property("keyboardModifiers").toUInt32());
}
}
示例12: validateNumber
QScriptValue QtScriptObject::validateNumber(const QString& parameterName, QScriptValue value)
{
if (!value.isNumber())
{
return this->throwError(QString(QT_TR_NOOP("Parameter %1 must be a number")).arg(parameterName));
}
return QScriptValue(QScriptValue::UndefinedValue);
}
示例13: evalDouble
double EnvWrap::evalDouble( const QString& nm )
{
QScriptValue result = evalExp(nm);
if (result.isNumber())
return result.toNumber();
else
throw ExpressionHasNotThisTypeException("Double",nm);
return double();
}
示例14: GetObjectInformation
void JavascriptInstance::GetObjectInformation(const QScriptValue &object, QSet<qint64> &ids, uint &valueCount, uint &objectCount, uint &nullCount, uint &numberCount,
uint &boolCount, uint &stringCount, uint &arrayCount, uint &funcCount, uint &qobjCount, uint &qobjMethodCount)
{
if (!ids.contains(object.objectId()))
ids << object.objectId();
QScriptValueIterator iter(object);
while(iter.hasNext())
{
iter.next();
QScriptValue v = iter.value();
if (ids.contains(v.objectId()))
continue;
ids << v.objectId();
valueCount++;
if (v.isNull())
nullCount++;
if (v.isNumber())
numberCount++;
else if (v.isBool())
boolCount++;
else if (v.isString())
stringCount++;
else if (v.isArray())
arrayCount++;
else if (v.isFunction())
funcCount++;
else if (v.isQObject())
qobjCount++;
if (v.isObject())
objectCount++;
if (v.isQMetaObject())
qobjMethodCount += v.toQMetaObject()->methodCount();
// Recurse
if ((v.isObject() || v.isArray()) && !v.isFunction() && !v.isString() && !v.isNumber() && !v.isBool() && !v.isQObject() && !v.isQMetaObject())
GetObjectInformation(v, ids, valueCount, objectCount, nullCount, numberCount, boolCount, stringCount, arrayCount, funcCount, qobjCount, qobjMethodCount);
}
}
示例15: return
const std::string QCATs::sprintf(const CSmallString& fname, QScriptContext* p_context,
QScriptEngine* p_engine)
{
if( p_context->argumentCount() < 1 ) {
CSmallString error;
error << fname << "(format[,value1,value2,..]) - illegal number of arguments, at least one is expected";
p_context->throwError(QString(error));
return("");
}
QString format;
format = p_context->argument(0).toString();
// prepare format
boost::format my_format;
try {
my_format.parse(format.toStdString());
} catch(...) {
CSmallString error;
error << fname << "(format[,value1,value2,..]) - unable to parse format";
p_context->throwError(QString(error));
return("");
}
if( my_format.expected_args() != (p_context->argumentCount() - 1) ){
CSmallString error;
error << fname << "(format[,value1,value2,..]) - format requires different number of values (";
error << my_format.expected_args() << ") than it is provided (" << (p_context->argumentCount() - 1) << ")";
p_context->throwError(QString(error));
return("");
}
// parse individual arguments
for(int i=0; i < my_format.expected_args(); i++ ){
QScriptValue val = p_context->argument(i+1);
try {
if( val.isNumber() ){
double sval = val.toNumber();
my_format % sval;
} else {
QString sval = val.toString();
my_format % sval.toStdString();
}
} catch(...){
CSmallString error;
error << fname << "(format[,value1,value2,..]) - unable to process argument (";
error << i + 1 << ")";
p_context->throwError(QString(error));
return("");
}
}
// return string
return( my_format.str() );
}