Ejemplo Wrapper (ActiveQt)
El ejemplo Wrapper demuestra cómo exportar clases QWidget existentes como controles ActiveX, y el uso de QAxFactory junto con la macro QAXFACTORY_EXPORT(). Los controles ActiveX de este ejemplo son las clases de botones estándar QPushButton, QCheckBox y QRadioButton proporcionadas por 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; } } }, }; };
La implementación de la fábrica devuelve la lista de controles soportados, crea controles bajo petición y proporciona información sobre los IDs únicos de las clases COM e interfaces para cada control.
QAXFACTORY_EXPORT(ActiveQtFactory, "{3B756301-0075-4E40-8BE8-5A81DE2426B7}", "{AB068077-4924-406a-BBAF-42D91C8727DD}")
La fábrica se exporta utilizando la macro QAXFACTORY_EXPORT.
Para construir el ejemplo primero debes construir la librería QAxServer. A continuación, ejecute qmake y su herramienta make en examples/activeqt/wrapper.
La demostración requiere un navegador web que soporte controles ActiveX, y que el scripting esté habilitado.
<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.