QAxAggregated Class

Die Klasse QAxAggregated ist eine abstrakte Basisklasse für Implementierungen weiterer COM-Schnittstellen. Mehr...

Kopfzeile: #include <QAxAggregated>
CMake: find_package(Qt6 REQUIRED COMPONENTS AxServer)
target_link_libraries(mytarget PRIVATE Qt6::AxServer)
qmake: QT += axserver

Öffentliche Funktionen

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

Geschützte Funktionen

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

Detaillierte Beschreibung

Erstellen Sie eine Unterklasse von QAxAggregated und reimplementieren Sie queryInterface(), um zusätzliche COM-Schnittstellen zu unterstützen. Verwenden Sie Mehrfachvererbung von diesen COM-Schnittstellen. Implementieren Sie die IUnknown-Schnittstelle dieser COM-Schnittstellen, indem Sie die Aufrufe an QueryInterface(), AddRef() und Release() an die von controllingUnknown() bereitgestellte Schnittstelle delegieren.

Verwenden Sie die Methode widget(), wenn Sie Aufrufe an die QWidget, die das ActiveX-Steuerelement implementiert, tätigen müssen. Sie dürfen diesen Zeiger nicht in Ihrer Unterklasse speichern (es sei denn, Sie verwenden QPointer), da die QWidget jederzeit vom ActiveQt-Framework zerstört werden kann.

Siehe auch QAxBindable, QAxFactory, und Active Qt.

Dokumentation der Mitgliedsfunktionen

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

Der Destruktor wird intern von Qt aufgerufen.

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

Gibt die Schnittstelle IUnknown des ActiveX-Steuerelements zurück. Implementieren Sie die Schnittstelle IUnknown in Ihrer Unterklasse QAxAggregated, um Aufrufe an QueryInterface(), AddRef() und Release() an die von dieser Funktion bereitgestellte Schnittstelle zu delegieren.

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

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

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

Anstatt diese drei Funktionen manuell zu deklarieren und zu implementieren, können Sie das Makro QAXAGG_IUNKNOWN in der Klassendeklaration Ihrer Unterklasse verwenden.

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

Gibt einen Zeiger auf die Unterklasse QObject zurück, die das COM-Objekt implementiert. Diese Funktion kann 0 zurückgeben.

Warnung: Sie dürfen den zurückgegebenen Zeiger nicht speichern, es sei denn, Sie verwenden eine QPointer, da die QObject jederzeit von ActiveQt zerstört werden kann.

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

Reimplementieren Sie diese rein virtuelle Funktion, um zusätzliche COM-Schnittstellen zu unterstützen. Setzen Sie den Wert von iface so, dass er auf dieses Objekt zeigt, um die Schnittstelle iid zu unterstützen. Beachten Sie, dass Sie den Zeiger this auf die entsprechende Oberklasse casten müssen.

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

Geben Sie die Standard-COM-Ergebnisse S_OK (Schnittstelle wird unterstützt) oder E_NOINTERFACE (angeforderte Schnittstelle wird nicht unterstützt) zurück.

Warnung: Auch wenn Sie die Schnittstelle IUnknown implementieren müssen, wenn Sie eine beliebige COM-Schnittstelle implementieren, dürfen Sie die Schnittstelle IUnknown in Ihrer queryInterface()-Implementierung nicht unterstützen.

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

Gibt einen Zeiger auf die Unterklasse QWidget zurück, die das ActiveX-Steuerelement implementiert. Diese Funktion kann 0 zurückgeben.

Warnung: Sie dürfen den zurückgegebenen Zeiger nicht speichern, es sei denn, Sie verwenden eine QPointer, da die QWidget jederzeit von ActiveQt zerstört werden kann.

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