Exemple de wrapper (ActiveQt)
L'exemple Wrapper montre comment exporter les classes QWidget existantes en tant que contrôles ActiveX et comment utiliser QAxFactory avec la macro QAXFACTORY_EXPORT(). Dans cet exemple, les contrôles ActiveX sont les classes de boutons standard QPushButton, QCheckBox et QRadioButton telles qu'elles sont fournies par Qt.
class ActiveQtFactory : public QAxFactory { public: ActiveQtFactory(const QUuid &lib, const QUuid &app) : QAxFactory(lib, app) {} QStringList featureList() const override { return m_activeElements.keys(); } QObject *createObject(const QString &key) override { auto it = m_activeElements.find(key); if (it != m_activeElements.end()) return it->create(); return nullptr; } const QMetaObject *metaObject(const QString &key) const override { auto it = m_activeElements.find(key); if (it != m_activeElements.end()) return it->metaObject; return nullptr; } QUuid classID(const QString &key) const override { auto it = m_activeElements.find(key); if (it != m_activeElements.end()) return it->classID; return QUuid(); } QUuid interfaceID(const QString &key) const override { auto it = m_activeElements.find(key); if (it != m_activeElements.end()) return it->interfaceID; return QUuid(); } QUuid eventsID(const QString &key) const override { auto it = m_activeElements.find(key); if (it != m_activeElements.end()) return it->eventsID; return QUuid(); } private: struct ActiveElement { QUuid classID; QUuid interfaceID; QUuid eventsID; const QMetaObject *metaObject; std::function<QObject *()> create; }; const QHash<QString, ActiveElement> m_activeElements { { QStringLiteral("QCheckBox"), { QUuid("{6E795DE9-872D-43CF-A831-496EF9D86C68}"), QUuid("{4FD39DD7-2DE0-43C1-A8C2-27C51A052810}"), QUuid("{FDB6FFBE-56A3-4E90-8F4D-198488418B3A}"), &QCheckBox::staticMetaObject, []() { return new QCheckBox; } } }, { QStringLiteral("QRadioButton"), { QUuid("{AFCF78C8-446C-409A-93B3-BA2959039189}"), QUuid("{7CC8AE30-206C-48A3-A009-B0A088026C2F}"), QUuid("{73EE4860-684C-4A66-BF63-9B9EFFA0CBE5}"), &QRadioButton::staticMetaObject, []() { return new QRadioButton; } } }, { QStringLiteral("QPushButton"), { QUuid("{2B262458-A4B6-468B-B7D4-CF5FEE0A7092}"), QUuid("{06831CC9-59B6-436A-9578-6D53E5AD03D3}"), QUuid("{3CC3F17F-EA59-4B58-BBD3-842D467131DD}"), &QPushButton::staticMetaObject, []() { return new QPushButton; } } }, { QStringLiteral("QToolButton"), { QUuid("{7c0ffe7a-60c3-4666-bde2-5cf2b54390a1}"), QUuid("{6726080f-d63d-4950-a366-9bf33e5cdf84}"), QUuid("{f4d421fd-4ead-4fd9-8a25-440766939639}"), &QToolButton::staticMetaObject, []() { return new QToolButton; } } }, }; };
L'implémentation de la fabrique renvoie la liste des contrôles pris en charge, crée des contrôles sur demande et fournit des informations sur les identifiants uniques des classes et interfaces COM pour chaque contrôle.
QAXFACTORY_EXPORT(ActiveQtFactory, "{3B756301-0075-4E40-8BE8-5A81DE2426B7}", "{AB068077-4924-406a-BBAF-42D91C8727DD}")
La fabrique est exportée à l'aide de la macro QAXFACTORY_EXPORT.
Pour créer l'exemple, vous devez d'abord créer la bibliothèque QAxServer. Ensuite, exécutez qmake et votre outil make dans examples/activeqt/wrapper.
La démonstration nécessite un navigateur web supportant les contrôles ActiveX et l'activation des scripts.
<SCRIPT LANGUAGE="VBScript"> Sub ToolButton_Clicked() RadioButton.text = InputBox( "Enter something", "Wrapper Demo" ) End Sub Sub PushButton_clicked() MsgBox( "Thank you!" ) End Sub Sub CheckBox_toggled( state ) if state = 0 then CheckBox.text = "Check me!" else CheckBox.text = "Uncheck me!" end if End Sub </SCRIPT> <p /> A QPushButton:<br /> <object ID="PushButton" CLASSID="CLSID:2B262458-A4B6-468B-B7D4-CF5FEE0A7092" CODEBASE="http://qt.nokia.com/demos/wrapperax.cab"> <PARAM NAME="text" VALUE="Click me!" /> [Object not available! Did you forget to build and register the server?] </object><br /> <p /> A QCheckBox:<br /> <object ID="CheckBox" CLASSID="CLSID:6E795de9-872d-43cf-a831-496ef9d86c68" CODEBASE="http://qt.nokia.com/demos/wrapperax.cab"> <PARAM NAME="text" VALUE="Check me!" /> [Object not available! Did you forget to build and register the server?] </object><br /> <p /> A QToolButton:<br /> <object ID="ToolButton" CLASSID="CLSID:7c0ffe7a-60c3-4666-bde2-5cf2b54390a1" CODEBASE="http://qt.nokia.com/demos/wrapperax.cab"> [Object not available! Did you forget to build and register the server?] </object><br /> <p /> A QRadioButton:<br /> <object ID="RadioButton" CLASSID="CLSID:afcf78c8-446c-409a-93b3-ba2959039189" CODEBASE="http://qt.nokia.com/demos/wrapperax.cab"> <PARAM NAME="text" VALUE="Tune me!" /> [Object not available! Did you forget to build and register the server?] </object><br />
© 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.