QAxAggregated类

QAxAggregated类是额外COM接口实现的抽象基类。更多信息...

头文件 #include <QAxAggregated>
CMakefind_package(Qt6 REQUIRED COMPONENTS AxServer)
target_link_libraries(mytarget PRIVATE Qt6::AxServer)
qmakeQT += axserver

公共函数

virtual longqueryInterface(const QUuid &iid, void **iface) = 0

受保护的函数

virtual~QAxAggregated()
IUnknown *controllingUnknown() const
QObject *object() const
QWidget *widget() const

详细描述

创建QAxAggregated的子类并重新实现queryInterface()以支持额外的COM接口。使用来自这些COM接口的多重继承。通过委托调用controllingUnknown()提供的接口实现这些COM接口的IUnknown接口。

如果需要调用实现ActiveX控件QWidget的方法,请使用widget()方法。您不得在子类中存储该指针(除非您使用QPointer),因为QWidget可以在任何时候由ActiveQt框架销毁。

另请参阅 QAxBindableQAxFactoryActive Qt

成员函数文档

[virtual constexpr noexcept protected] QAxAggregated::~QAxAggregated()

Qt内部调用析构函数。

[protected] IUnknown *QAxAggregated::controllingUnknown() const

返回ActiveX控件的IUnknown接口。在您的QAxAggregated子类中实现IUnknown接口,并通过此函数调用提供相应的接口将调用委托给QueryInterface()AddRef()Release()

HRESULT AxImpl::QueryInterface(REFIID iid, void **iface)
{
    return controllingUnknown()->QueryInterface(iid, iface);
}

ulong AxImpl::AddRef()
{
    return controllingUnknown()->AddRef();
}

ulong AxImpl::Release()
{
    return controllingUnknown()->Release();
}

您可以使用子类类声明中的QAXAGG_IUNKNOWN宏来自动声明和实现这些三个函数。

[受保护] QObject *QAxAggregated::object() const

返回实现 COM 对象的 QObject 子类的指针。此函数可能会返回 0。

警告:您不得存储返回的指针,除非您使用 QPointer,因为 QObject 可以在 ActiveQt 任何时候被销毁。

[纯虚函数] long QAxAggregated::queryInterface(const QUuid &iid, void **iface)

重新实现此纯虚函数以支持额外的 COM 接口。将 iface 的值设置为指向此对象,以支持接口 iid。请注意,您必须将 this 指针转换为适当的超类。

long AxImpl::queryInterface(const QUuid &iid, void **iface)
{
    *iface = 0;
    if (iid == IID_ISomeCOMInterface)
        *iface = (ISomeCOMInterface*)this;
    else
        return E_NOINTERFACE;

    AddRef();
    return S_OK;
}

返回标准 COM 结果 S_OK(接口受支持)或 E_NOINTERFACE(请求的接口不受支持)。

警告:尽管您必须实现 IUnknown 接口,但如果您实现了任何 COM 接口,您必须在您的 queryInterface() 实现中不支持 IUnknown 接口。

[受保护] QWidget *QAxAggregated::widget() const

返回实现 ActiveX 控件的 QWidget 子类的指针。此函数可能会返回 0。

警告:您不得存储返回的指针,除非您使用 QPointer,因为 QWidget 可以在任何时候由 ActiveQt 销毁。

© 2024 The Qt Company Ltd. 本文档中包含的文档贡献是各自所有者的版权。本提供的文档根据自由软件基金会发布的 GNU 自由文档许可协议版本 1.3 的条款授予许可。Qt 和相应商标是芬兰及/或其他国家/地区的 The Qt Company Ltd. 的商标。所有其他商标均为各自所有者的财产。