Wrapper-Beispiel (ActiveQt)
Das Wrapper-Beispiel veranschaulicht, wie vorhandene „ QWidget “-Klassen als ActiveX-Steuerelemente exportiert werden und wie „ QAxFactory “ in Verbindung mit dem Makro „ QAXFACTORY_EXPORT() “ verwendet wird. Bei den ActiveX-Steuerelementen in diesem Beispiel handelt es sich um die von Qt bereitgestellten Standard-Schaltflächenklassen „ QPushButton “, „ QCheckBox “ und „ QRadioButton “.
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; }
}
},
};
};Die Factory-Implementierung gibt die Liste der unterstützten Steuerelemente zurück, erstellt Steuerelemente auf Anfrage und liefert Informationen zu den eindeutigen IDs der COM-Klassen und -Schnittstellen für jedes Steuerelement.
QAXFACTORY_EXPORT(ActiveQtFactory, "{3B756301-0075-4E40-8BE8-5A81DE2426B7}", "{AB068077-4924-406a-BBAF-42D91C8727DD}")Die Factory wird mithilfe des Makros „ QAXFACTORY_EXPORT “ exportiert.
Um das Beispiel zu erstellen, müssen Sie zunächst die Bibliothek „ QAxServer “ erstellen. Führen Sie anschließend „ qmake “ und Ihr Make-Tool in „ examples/activeqt/wrapper “ aus.
Für die Demonstration ist ein Webbrowser erforderlich, der ActiveX-Steuerelemente unterstützt, und Skripting muss aktiviert sein.
<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.