本页内容

QAxScriptManager Class

QAxScriptManager 类在应用程序对象和脚本代码之间架起了一座桥梁。更多内容...

标题: #include <qaxscript.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS AxContainer)
target_link_libraries(mytarget PRIVATE Qt6::AxContainer)
qmake: QT += axcontainer
继承自: QObject

公共函数

QAxScriptManager(QObject *parent = nullptr)
virtual ~QAxScriptManager() override
void addObject(QAxBase *object)
void addObject(QObject *object)
QVariant call(const QString &function, const QVariant &var1 = QVariant(), const QVariant &var2 = QVariant(), const QVariant &var3 = QVariant(), const QVariant &var4 = QVariant(), const QVariant &var5 = QVariant(), const QVariant &var6 = QVariant(), const QVariant &var7 = QVariant(), const QVariant &var8 = QVariant())
QVariant call(const QString &function, QList<QVariant> &arguments)
QStringList functions(QAxScript::FunctionFlags flags = QAxScript::FunctionNames) const
QAxScript *load(const QString &code, const QString &name, const QString &language)
QAxScript *load(const QString &file, const QString &name)
QAxScript *script(const QString &name) const
QStringList scriptNames() const

信号

void error(QAxScript *script, int code, const QString &description, int sourcePosition, const QString &sourceText)

静态公共成员

bool registerEngine(const QString &name, const QString &extension, const QString &code = QString())
QString scriptFileFilter()

详细说明

QAxScriptManager 充当了通过QAxObject 或QAxWidget 嵌入到 Qt 应用程序中的 COM 对象与通过 Windows Script 技术(通常是 JScript 和 VBScript)提供的脚本语言之间的桥梁。

为应用程序中的每个独立文档创建一个 QAxScriptManager,并使用addObject() 添加脚本需要访问的 COM 对象。然后使用load() 加载脚本源,并使用call() 调用函数。

警告: bcc5.5 编译器不支持此类 。

另请参阅 QAxScript 、QAxScriptEngine 、QAxBase 以及ActiveQt 框架。

成员函数文档

[explicit] QAxScriptManager::QAxScriptManager(QObject *parent = nullptr)

创建一个 QAxScriptManager 对象。parent 将作为参数传递给QObject 的构造函数。

通常,应用程序中每个文档都会创建一个 QAxScriptManager。

[override virtual noexcept] QAxScriptManager::~QAxScriptManager()

销毁这些对象,并释放所有已分配的资源。

void QAxScriptManager::addObject(QAxBase *object)

将object 添加到管理器中。由该管理器处理的脚本可在代码中通过该对象的objectName 属性访问该对象。

在加载任何脚本之前,必须先添加所有必要的对象。

void QAxScriptManager::addObject(QObject *object)

向管理器添加一个用于object 的通用 COM 封装器。object 必须利用QAxServer 模块提供的功能,以 COM 对象的形式对外暴露。使用此函数的应用程序必须链接到 qaxserver 库。

这是一个重载函数。

QVariant QAxScriptManager::call(const QString &function, const QVariant &var1 = QVariant(), const QVariant &var2 = QVariant(), const QVariant &var3 = QVariant(), const QVariant &var4 = QVariant(), const QVariant &var5 = QVariant(), const QVariant &var6 = QVariant(), const QVariant &var7 = QVariant(), const QVariant &var8 = QVariant())

调用function ,将参数var1 、var1 、var2 、var3 、var4 、var5 、var6 、var7 和var8 作为参数传递,并返回该函数返回的值;如果函数未返回值或函数调用失败,则返回无效的QVariant 。当脚本执行完成时,该调用结束。

在大多数脚本引擎中,唯一支持的参数类型是“constQVariant&”,例如,要调用一个 JavaScript 函数

function setNumber(number)
{
    n = number;
}

请使用

QValueList args;
args << 5;
script->call("setNumber(const QVariant&)", args);

与dynamicCall 一样,参数可以直接嵌入函数字符串中。

script->call("setNumber(5)");

但是,这种方法速度较慢。

不支持内省的脚本引擎提供的函数无法使用,必须通过在相应的script 对象上使用QAxScript::call() 直接调用。

请注意,调用此函数的速度可能比直接在相应的QAxScript 上使用 call() 慢得多。

QVariant QAxScriptManager::call(const QString &function, QList<QVariant> &arguments)

调用function ,将arguments 作为参数传递,并返回结果。当脚本执行完毕时返回。

这是一个重载函数。

[signal] void QAxScriptManager::error(QAxScript *script, int code, const QString &description, int sourcePosition, const QString &sourceText)

当运行script 时发生执行错误,将触发此信号。

code,description,sourcePosition 以及sourceText 包含有关该执行错误的信息。

警告:请 勿在连接到此信号的插槽中删除script 。请改用deleteLater()。

QStringList QAxScriptManager::functions(QAxScript::FunctionFlags flags = QAxScript::FunctionNames) const

返回一个包含所有可用函数的列表。不支持内省的脚本引擎提供的函数不会被包含在该列表中。这些函数是带完整原型提供,还是仅以名称形式提供,取决于flags 的值。

QAxScript *QAxScriptManager::load(const QString &code, const QString &name, const QString &language)

使用language 的脚本引擎加载脚本源code 。之后可通过其name (该指针不应为空)引用该脚本。

如果code 加载成功,该函数将返回指向给定code 脚本的指针;否则返回 0。

如果language 为空,则将通过启发式方法进行判定。如果code 包含字符串“End Sub”,则将其解释为 VBScript;否则解释为 JScript。可使用registerEngine() 注册其他脚本引擎。

在加载任何脚本之前,必须先通过addObject()添加所有必要的对象。如果code 声明了一个已存在的函数(无论使用何种语言),则该函数将被重载,且无法再通过call()调用;但仍可通过直接调用其script 来使用该函数。

另请参阅 addObject()、scriptNames(),以及functions()。

QAxScript *QAxScriptManager::load(const QString &file, const QString &name)

从file 加载源代码。之后可通过其name 引用该脚本,该指针不应为空。

如果file 加载成功,该函数将返回指向file 中代码的脚本引擎的指针;否则返回 0。

所使用的脚本引擎由文件扩展名决定。默认情况下,".js" 文件被解释为 JScript 文件,而 ".vbs" 和 ".dsm" 文件被解释为 VBScript。可以通过registerEngine() 注册其他脚本引擎。

这是一个重载函数。

[static] bool QAxScriptManager::registerEngine(const QString &name, const QString &extension, const QString &code = QString())

注册名为name 的脚本引擎,若找到该引擎则返回 true;否则不执行任何操作并返回 false。

当加载具有指定extension 的文件,或加载包含字符串code 的源代码时,将使用该脚本引擎。

QAxScript *QAxScriptManager::script(const QString &name) const

返回名为name 的脚本。

您可以使用返回的指针直接通过QAxScript::call() 调用函数,直接访问脚本引擎,或者将其删除并卸载该脚本。

[static] QString QAxScriptManager::scriptFileFilter()

返回一个文件过滤器,其中列出了所有受支持的脚本语言。该过滤器字符串便于与QFileDialog 配合使用。

QStringList QAxScriptManager::scriptNames() const

返回一个包含所有脚本名称的列表。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.