void MyHttpRequest::finished(QNetworkReply *reply) { Data temp = queue_replyData.dequeue (); ReplyType type=temp.replyType; bool isError = !(reply->error () == QNetworkReply::NoError); if(type==CallbackFun){ #if(QT_VERSION>=0x050000) QJSValueList list; list.append (QJSValue(isError)); list.append (QJSValue(isError?reply->errorString ():reply->readAll ())); temp.callbackFun.call (list); #else QScriptValueList list; list.append (QScriptValue(isError)); list.append (QScriptValue(isError?reply->errorString ():reply->readAll ())); temp.callbackFun.call (QScriptValue(), list); #endif }else if(type==ConnectSlot){ QObject* obj = temp.caller; QByteArray slotName = temp.slotName; if(obj!=NULL){ bool ok;//记录调用槽是否成功 int parameterCount = obj->metaObject()->method(obj->metaObject()->indexOfMethod(slotName)).parameterTypes().length(); QRegExp reg("^[^(]+"); reg.indexIn (slotName); slotName = reg.cap (0).toLatin1 (); if(parameterCount==0){//如果形参个数为0个 ok = QMetaObject::invokeMethod(obj, slotName); }else if(parameterCount==1){ ok = QMetaObject::invokeMethod(obj, slotName, Q_ARG(QNetworkReply*, reply)); }else if(parameterCount==2){
/*! Creates a new \c{Object} and calls this QJSValue as a constructor, using the created object as the `this' object and passing \a args as arguments. If the return value from the constructor call is an object, then that object is returned; otherwise the default constructed object is returned. If this QJSValue is not a function, callAsConstructor() does nothing and returns an undefined QJSValue. Calling this function can cause an exception to occur in the script engine; in that case, the value that was thrown (typically an \c{Error} object) is returned. You can call isError() on the return value to determine whether an exception occurred. \sa call(), QJSEngine::newObject() */ QJSValue QJSValue::callAsConstructor(const QJSValueList &args) { FunctionObject *f = d->value.asFunctionObject(); if (!f) return QJSValue(); ExecutionEngine *engine = d->engine; assert(engine); Scope scope(engine); ScopedCallData callData(scope, args.size()); for (int i = 0; i < args.size(); ++i) { if (!args.at(i).d->checkEngine(engine)) { qWarning("QJSValue::callAsConstructor() failed: cannot construct function with argument created in a different engine"); return QJSValue(); } callData->args[i] = args.at(i).d->getValue(engine); } ScopedValue result(scope); QV4::ExecutionContext *ctx = engine->currentContext(); result = f->construct(callData); if (scope.hasException()) result = ctx->catchException(); return new QJSValuePrivate(engine, result); }
void QQuickWebEngineViewPrivate::didFindText(quint64 requestId, int matchCount) { QJSValue callback = m_callbacks.take(requestId); QJSValueList args; args.append(QJSValue(matchCount)); callback.call(args); }
void QQuickWebEngineViewPrivate::didRunJavaScript(quint64 requestId, const QVariant &result) { Q_Q(QQuickWebEngineView); QJSValue callback = m_callbacks.take(requestId); QJSValueList args; args.append(qmlEngine(q)->toScriptValue(result)); callback.call(args); }
QString HsQMLAutoListModel::keyFunction(const QJSValue& a) { if (mKeyFunctionValid) { QJSValueList args; args.append(a); return mKeyFunction.call(args).toString(); } else { return a.toString(); } }
bool HsQMLAutoListModel::equalityTest(const QJSValue& a, const QJSValue& b) { if (mEqualityTestValid) { QJSValueList args; args.append(a); args.append(b); return mEqualityTest.call(args).toBool(); } else { return a.equals(b); } }
void QQuickWebEngineViewExperimental::findText(const QString &subString, FindFlags options, const QJSValue &callback) { if (subString.isEmpty()) { d_ptr->adapter->stopFinding(); if (!callback.isUndefined()) { QJSValueList args; args.append(QJSValue(0)); const_cast<QJSValue&>(callback).call(args); } } else { quint64 requestId = d_ptr->adapter->findText(subString, options & FindCaseSensitively, options & FindBackward); if (!callback.isUndefined()) d_ptr->m_callbacks.insert(requestId, callback); } }
void QFAppScriptRunnable::setCondition(QJSValue condition) { m_condition = condition; if (condition.isString()) { setType(condition.toString()); m_isSignalCondition = false; } else if (condition.isObject() && condition.hasProperty("connect")) { Q_ASSERT(!m_engine.isNull()); QString type = QString("QuickFlux.AppScript.%1").arg(QUuid::createUuid().toString()); setType(type); QString generator = "(function(dispatcher) { return function() {dispatcher.dispatch(arguments)}})"; QFAppDispatcher* dispatcher = QFAppDispatcher::instance(m_engine); QFAppScriptDispatcherWrapper * wrapper = new QFAppScriptDispatcherWrapper(); wrapper->setType(type); wrapper->setDispatcher(dispatcher); QJSValue generatorFunc = m_engine->evaluate(generator); QJSValueList args; args << m_engine->newQObject(wrapper); QJSValue callback = generatorFunc.call(args); args.clear(); args << callback; QJSValue connect = condition.property("connect"); connect.callWithInstance(condition,args); m_callback = callback; m_isSignalCondition = true; } else { qWarning() << "AppScript: Invalid condition type"; } }