⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qscriptengine.h

📁 奇趣公司比较新的qt/emd版本
💻 H
字号:
/******************************************************************************** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.**** This file is part of the QtScript module of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://trolltech.com/products/qt/licenses/licensing/opensource/**** If you are unsure which license is appropriate for your use, please** review the following information:** http://trolltech.com/products/qt/licenses/licensing/licensingoverview** or contact the sales department at sales@trolltech.com.**** In addition, as a special exception, Trolltech gives you certain** additional rights. These rights are described in the Trolltech GPL** Exception version 1.0, which can be found at** http://www.trolltech.com/products/qt/gplexception/ and in the file** GPL_EXCEPTION.txt in this package.**** In addition, as a special exception, Trolltech, as the sole copyright** holder for Qt Designer, grants users of the Qt/Eclipse Integration** plug-in the right for the Qt/Eclipse Integration to link to** functionality provided by Qt Designer and its related libraries.**** Trolltech reserves all rights not expressly granted herein.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#ifndef QSCRIPTENGINE_H#define QSCRIPTENGINE_H#include <QtCore/qmetatype.h>#ifndef QT_NO_SCRIPT#include <QtCore/qvariant.h>#ifndef QT_NO_QOBJECT#include <QtCore/qobject.h>#else#include <QtCore/qobjectdefs.h>#endif#include <QtScript/qscriptvalue.h>#include <QtScript/qscriptcontext.h>QT_BEGIN_HEADERQT_MODULE(Script)class QDateTime;class QScriptEnginePrivate;#ifndef QT_NO_QOBJECTtemplate <class T>inline QScriptValue qscriptQMetaObjectConstructor(QScriptContext *, QScriptEngine *){    return 0;}template <class T>inline QScriptValue qScriptValueFromQMetaObject(    QScriptEngine *engine    );#endif // QT_NO_QOBJECT#ifndef QT_NO_REGEXPclass QRegExp;#endif#ifndef QT_NO_MEMBER_TEMPLATEStemplate <typename T>inline QScriptValue qScriptValueFromValue(QScriptEngine *, const T &);template <typename T>inline T qScriptValueToValue(const QScriptValue &);#endifclass Q_SCRIPT_EXPORT QScriptEngine#ifndef QT_NO_QOBJECT    : public QObject#endif{#ifndef QT_NO_QOBJECT    Q_OBJECT#endifpublic:    enum ValueOwnership {        QtOwnership,        ScriptOwnership,        AutoOwnership    };    enum QObjectWrapOption {        ExcludeChildObjects = 0x0001,        ExcludeSuperClassMethods = 0x0002,        ExcludeSuperClassProperties = 0x0004,        AutoCreateDynamicProperties = 0x0100    };    Q_DECLARE_FLAGS(QObjectWrapOptions, QObjectWrapOption)    QScriptEngine();#ifndef QT_NO_QOBJECT    explicit QScriptEngine(QObject *parent);#endif    virtual ~QScriptEngine();    QScriptValue globalObject() const;    QScriptContext *currentContext() const;    QScriptContext *pushContext();    void popContext();    bool canEvaluate(const QString &program) const;    QScriptValue evaluate(const QString &program, const QString &fileName = QString(), int lineNumber = 1);    bool hasUncaughtException() const;    QScriptValue uncaughtException() const;    int uncaughtExceptionLineNumber() const;    QStringList uncaughtExceptionBacktrace() const;    QScriptValue nullValue();    QScriptValue undefinedValue();    typedef QScriptValue (*FunctionSignature)(QScriptContext *, QScriptEngine *);    QScriptValue newFunction(FunctionSignature signature, int length = 0);    QScriptValue newFunction(FunctionSignature signature, const QScriptValue &prototype, int length = 0);    QScriptValue newVariant(const QVariant &value);#ifndef QT_NO_REGEXP    QScriptValue newRegExp(const QRegExp &regexp);#endif    QScriptValue newObject();    QScriptValue newArray(uint length = 0);    QScriptValue newRegExp(const QString &pattern, const QString &flags);    QScriptValue newDate(qsreal value);    QScriptValue newDate(const QDateTime &value);    QScriptValue newActivationObject();#ifndef QT_NO_QOBJECT    QScriptValue newQObject(QObject *object, ValueOwnership ownership = QtOwnership,                            const QObjectWrapOptions &options = 0);    QScriptValue newQMetaObject(const QMetaObject *metaObject, const QScriptValue &ctor = QScriptValue());#  ifndef QT_NO_MEMBER_TEMPLATES    template <class T> QScriptValue scriptValueFromQMetaObject()    {        return qScriptValueFromQMetaObject<T>(this);    }#  endif // QT_NO_MEMBER_TEMPLATES#endif // QT_NO_QOBJECT    QScriptValue defaultPrototype(int metaTypeId) const;    void setDefaultPrototype(int metaTypeId, const QScriptValue &prototype);    typedef QScriptValue (*MarshalFunction)(QScriptEngine *, const void *);    typedef void (*DemarshalFunction)(const QScriptValue &, void *);#ifndef QT_NO_MEMBER_TEMPLATES    template <typename T>    inline QScriptValue toScriptValue(const T &value)    {        return qScriptValueFromValue(this, value);    }    template <typename T>    inline T fromScriptValue(const QScriptValue &value)    {        return qScriptValueToValue<T>(value);    }#endif // QT_NO_MEMBER_TEMPLATES    QScriptValue importExtension(const QString &extension);    void collectGarbage();    void setProcessEventsInterval(int interval);    int processEventsInterval() const;private:    QScriptValue create(int type, const void *ptr);    bool convert(const QScriptValue &value, int type, void *ptr);    void registerCustomType(int type, MarshalFunction mf, DemarshalFunction df,                            const QScriptValue &prototype);    friend inline void qScriptRegisterMetaType_helper(QScriptEngine *,        int, MarshalFunction, DemarshalFunction, const QScriptValue &);    friend inline QScriptValue qScriptValueFromValue_helper(QScriptEngine *, int, const void *);    friend inline bool qscriptvalue_cast_helper(const QScriptValue &, int, void *);protected:#ifdef QT_NO_QOBJECT    QScriptEnginePrivate *d_ptr;    QScriptEngine(QScriptEnginePrivate &dd);#else    QScriptEngine(QScriptEnginePrivate &dd, QObject *parent = 0);#endifprivate:    Q_DECLARE_PRIVATE(QScriptEngine)    Q_DISABLE_COPY(QScriptEngine)};#ifndef QT_NO_QOBJECTtemplate <class T>inline QScriptValue qScriptValueFromQMetaObject(    QScriptEngine *engine    ){    QScriptEngine::FunctionSignature fun = qscriptQMetaObjectConstructor<T>;    return engine->newQMetaObject(&T::staticMetaObject,                                  engine->newFunction(fun));}#define Q_SCRIPT_DECLARE_QMETAOBJECT(T, _Arg1) \template<> inline QScriptValue qscriptQMetaObjectConstructor<T>(QScriptContext *ctx, QScriptEngine *eng) \{ \    _Arg1 arg1 = qscriptvalue_cast<_Arg1> (ctx->argument(0)); \    return eng->newQObject(new T(arg1), QScriptEngine::AutoOwnership); \}#endif // QT_NO_QOBJECTinline QScriptValue qScriptValueFromValue_helper(QScriptEngine *engine, int type, const void *ptr){    if (!engine)        return QScriptValue();    return engine->create(type, ptr);}template <typename T>inline QScriptValue qScriptValueFromValue(QScriptEngine *engine, const T &t){    return qScriptValueFromValue_helper(engine, qMetaTypeId<T>(), &t);}inline bool qscriptvalue_cast_helper(const QScriptValue &value, int type, void *ptr){    if (QScriptEngine *eng = value.engine())        return eng->convert(value, type, ptr);    return false;}template<typename T>T qscriptvalue_cast(const QScriptValue &value#ifndef Q_QDOC, T * = 0#endif    ){    T t;    const int id = qMetaTypeId<T>();    if (qscriptvalue_cast_helper(value, id, &t))        return t;    else if (value.isVariant())        return qvariant_cast<T>(value.toVariant());    return T();}template <typename T>inline T qScriptValueToValue(const QScriptValue &value){    return qscriptvalue_cast<T>(value);}inline void qScriptRegisterMetaType_helper(QScriptEngine *eng, int type,                                           QScriptEngine::MarshalFunction mf,                                           QScriptEngine::DemarshalFunction df,                                           const QScriptValue &prototype){    eng->registerCustomType(type, mf, df, prototype);}template<typename T>int qScriptRegisterMetaType(    QScriptEngine *eng,    QScriptValue (*toScriptValue)(QScriptEngine *, const T &t),    void (*fromScriptValue)(const QScriptValue &, T &t),    const QScriptValue &prototype = QScriptValue()#ifndef qdoc    , T * /* dummy */ = 0#endif){    const int id = qRegisterMetaType<T>(); // make sure it's registered    qScriptRegisterMetaType_helper(        eng, id, reinterpret_cast<QScriptEngine::MarshalFunction>(toScriptValue),        reinterpret_cast<QScriptEngine::DemarshalFunction>(fromScriptValue),        prototype);    return id;}template <class Container>QScriptValue qScriptValueFromSequence(QScriptEngine *eng, const Container &cont){    QScriptValue a = eng->newArray();    typename Container::const_iterator begin = cont.begin();    typename Container::const_iterator end = cont.end();    typename Container::const_iterator it;    quint32 i;    for (it = begin, i = 0; it != end; ++it, ++i)        a.setProperty(i, qScriptValueFromValue(eng, *it));    return a;}template <class Container>void qScriptValueToSequence(const QScriptValue &value, Container &cont){    quint32 len = value.property(QLatin1String("length")).toUInt32();    for (quint32 i = 0; i < len; ++i) {        QScriptValue item = value.property(i);#if defined Q_CC_MSVC && !defined Q_CC_MSVC_NET        cont.push_back(qscriptvalue_cast<Container::value_type>(item));#else        cont.push_back(qscriptvalue_cast<typename Container::value_type>(item));#endif    }}template<typename T>int qScriptRegisterSequenceMetaType(    QScriptEngine *engine,    const QScriptValue &prototype = QScriptValue()#ifndef qdoc    , T * /* dummy */ = 0#endif){    return qScriptRegisterMetaType<T>(engine, qScriptValueFromSequence,                                      qScriptValueToSequence, prototype);}Q_DECLARE_OPERATORS_FOR_FLAGS(QScriptEngine::QObjectWrapOptions)QT_END_HEADER#endif // QT_NO_SCRIPT#endif // QSCRIPTENGINE_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -