Exemple de wrapper (ActiveQt)
L'exemple de wrapper montre comment exporter des classes existantes d'QWidget en tant que contrôles ActiveX, ainsi que l'utilisation de la fonction ` QAxFactory ` associée à la macro ` QAXFACTORY_EXPORT() `. Les contrôles ActiveX de cet exemple sont les classes de boutons standard ` QPushButton`, ` QCheckBox ` et ` QRadioButton ` 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 à la demande et fournit des informations sur les identifiants uniques des classes COM et des interfaces 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 compiler l'exemple, vous devez d'abord compiler la bibliothèque QAxServer. Exécutez ensuite la commande « qmake » et votre outil de compilation dans le répertoire examples/activeqt/wrapper.
La démonstration nécessite un navigateur Web prenant en charge les contrôles ActiveX, ainsi que 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.