本页内容

QAxBindable Class

QAxBindable 类为QWidget 与 ActiveX 客户端之间提供了一个接口。更多内容...

头文件: #include <qaxbindable.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS AxServer)
target_link_libraries(mytarget PRIVATE Qt6::AxServer)
qmake: QT += axserver

公共函数

QAxBindable()
virtual ~QAxBindable()
virtual QAxAggregated *createAggregate()
virtual bool readData(QIODevice *source, const QString &format)
void reportError(int code, const QString &src, const QString &desc, const QString &context = QString())
virtual bool writeData(QIODevice *sink)

受保护函数

IUnknown *clientSite() const
void propertyChanged(const char *property)
bool requestPropertyChange(const char *property)

详细说明

该类提供的函数允许 ActiveX 控件将属性更改通知给客户端应用程序。让您的控件类同时继承自QWidget (直接或间接)和本类,即可使用本类的函数。Meta-Object Compiler要求您首先继承自QWidget 。

class MyActiveX : public QWidget, public QAxBindable
{
    Q_OBJECT
    Q_PROPERTY(int value READ value WRITE setValue)

public:
    MyActiveX(QWidget *parent = 0);
    ...

    int value() const;
    void setValue(int);
};

在实现属性写入函数时,请使用requestPropertyChange()从ActiveX客户端应用程序处获取更改该属性的权限。当属性发生变化时,请调用propertyChanged()以通知ActiveX客户端应用程序该变化。如果控件中发生致命错误,请使用静态函数reportError()通知客户端。

使用clientSite() 返回的接口来调用 ActiveX 客户端。若要在 ActiveX 控件中实现其他 COM 接口,请重写createAggregate() 方法,使其返回QAxAggregated 子类的全新对象。

另请参阅 QAxAggregated 、QAxFactory 以及ActiveQt 框架。

成员函数文档

QAxBindable::QAxBindable()

创建一个空的 QAxBindable 对象。

[virtual noexcept] QAxBindable::~QAxBindable()

销毁QAxBindable 对象。

[protected] IUnknown *QAxBindable::clientSite() const

返回指向此 ActiveX 对象客户端接口的指针;如果未设置客户端,则返回 null。

在返回的接口上调用QueryInterface() 方法,以获取要调用的接口。

[virtual] QAxAggregated *QAxBindable::createAggregate()

当您希望在 ActiveX 控件中实现其他 COM 接口,或者希望为 COM 接口提供替代实现时,请重新实现此函数。返回一个QAxAggregated 子类的新对象。

默认实现返回空指针。

[protected] void QAxBindable::propertyChanged(const char *property)

调用此函数可通知托管此 ActiveX 控件的客户端,property 属性已发生更改。

该函数通常在该属性的写入函数结束时被调用。

另请参阅 requestPropertyChange()。

[virtual] bool QAxBindable::readData(QIODevice *source, const QString &format)

如果 COM 对象支持 MIME 类型,则会调用此函数,根据format 中的数据source 初始化该 COM 对象。在从source 读取数据之前,必须先以读取模式打开该文件。

返回 true 表示成功。如果函数返回 false,则 ActiveQt 将通过元对象系统设置属性来处理数据。

若重写此函数,还必须实现writeData()。默认实现不执行任何操作并返回 false。

警告: 嵌入在 HTML 中的ActiveX 控件既可以使用object 标签的type 和data 属性来读取数据,也可以使用一组param 标签来初始化属性。如果使用了param 标签,则 Internet Explorer 将忽略data 属性,并且不会调用 readData。

另请参阅 writeData()。

void QAxBindable::reportError(int code, const QString &src, const QString &desc, const QString &context = QString())

向客户端应用程序报告错误。code 是控件定义的错误代码。desc 是面向应用程序用户的、易于理解的错误描述。src 是错误来源的名称,通常为ActiveX服务器名称。context 可以是包含该错误更多信息的帮助文件的位置。 如果context 以方括号中的数字结尾(例如 [12]),该数字将在帮助文件中被解释为上下文 ID。

[protected] bool QAxBindable::requestPropertyChange(const char *property)

调用此函数以向托管此 ActiveX 控件的客户端请求更改属性property 的权限。如果客户端允许更改,则返回 true;否则返回 false。

该函数通常在property 的写入函数中首先被调用,如果该函数返回false,则放弃写入操作。

void MyActiveQt::setText(const QString &text)
{
    if (!requestPropertyChange("text"))
        return;

    // update property

    propertyChanged("text");
}

另请参阅 propertyChanged()。

[virtual] bool QAxBindable::writeData(QIODevice *sink)

如果 COM 对象支持 MIME 类型,则会调用此函数将 COM 对象存储到sink 中。在向sink 写入数据之前,必须先以写入模式打开该文件。

返回 true 表示操作成功。如果函数返回 false,则 ActiveQt 将通过存储属性值来序列化该对象。

若重写此函数,还必须实现readData()。默认实现不执行任何操作并返回 false。

另请参阅 readData()。

© 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.