Sur cette page

QAxAggregated Class

La classe QAxAggregated est une classe de base abstraite destinée aux implémentations d'interfaces COM supplémentaires. En savoir plus...

En-tête : #include <qaxaggregated.h>
CMake : find_package(Qt6 REQUIRED COMPONENTS AxServer)
target_link_libraries(mytarget PRIVATE Qt6::AxServer)
qmake : QT += axserver

Fonctions publiques

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

Fonctions protégées

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

Description détaillée

Créez une sous-classe de QAxAggregated et réimplémentez la méthode queryInterface() pour prendre en charge des interfaces COM supplémentaires. Utilisez l’héritage multiple à partir de ces interfaces COM. Implémentez l’interface IUnknown de ces interfaces COM en déléguant les appels vers QueryInterface(), AddRef() et Release() à l’interface fournie par la méthode controllingUnknown().

Utilisez la méthode widget() si vous devez effectuer des appels vers l'QWidget implémentant le contrôle ActiveX. Vous ne devez pas stocker ce pointeur dans votre sous-classe (à moins d'utiliser QPointer), car l'QWidget peut être détruit à tout moment par le framework ActiveQt.

Voir également QAxBindable, QAxFactory et Active Qt.

Documentation sur les fonctions membres

[constexpr noexcept protected default] QAxAggregated::QAxAggregated()

Construit par défaut une instance de ` QAxAggregated`.

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

Le destructeur est appelé en interne par Qt.

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

Renvoie l'interface « IUnknown » du contrôle ActiveX. Implémentez l'interface « IUnknown » dans votre sous-classe « QAxAggregated » afin de déléguer les appels vers « QueryInterface() », « AddRef() » et « Release() » à l'interface fournie par cette fonction.

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

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

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

Au lieu de déclarer et d’implémenter ces trois fonctions manuellement, vous pouvez utiliser la macro ` QAXAGG_IUNKNOWN ` dans la déclaration de classe de votre sous-classe.

[protected] QObject *QAxAggregated::object() const

Renvoie un pointeur vers la sous-classe de ` QObject ` implémentant l'objet COM. Cette fonction peut renvoyer 0.

Avertissement : vous ne devez pas stocker le pointeur renvoyé, sauf si vous utilisez un ` QPointer`, car l’ QObject peut être détruit par ActiveQt à tout moment.

[pure virtual] long QAxAggregated::queryInterface(const QUuid &iid, void **iface)

Réimplémentez cette fonction virtuelle pure pour prendre en charge des interfaces COM supplémentaires. Définissez la valeur de ` iface ` de manière à ce qu’elle pointe vers cet objet afin de prendre en charge l’interface ` iid`. Notez que vous devez effectuer un transtypage du pointeur ` this ` vers la superclasse appropriée.

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;
}

Renvoyez les résultats COM standard : ` S_OK ` (l'interface est prise en charge) ou ` E_NOINTERFACE ` (l'interface demandée n'est pas prise en charge).

Avertissement : même si vous devez implémenter l’interface IUnknown lorsque vous implémentez une interface COM, vous ne devez pas prendre en charge l’interface IUnknown dans votre implémentation de la méthode queryInterface().

[protected] QWidget *QAxAggregated::widget() const

Renvoie un pointeur vers la sous-classe de ` QWidget ` implémentant le contrôle ActiveX. Cette fonction peut renvoyer 0.

Avertissement : vous ne devez pas stocker le pointeur renvoyé, sauf si vous utilisez un ` QPointer`, car l'QWidget ` peut être détruit par ActiveQt à tout moment.

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