Exemple simple (ActiveQt)
L'exemple simple démontre l'utilisation de QAxBindable et QAxFactory.
L'exemple simple démontre l'utilisation de QAxBindable::requestPropertyChange() et QAxBindable::propertyChanged(), ainsi que l'utilisation de QAxFactory à travers les macros QAXFACTORY_BEGIN(), QAXCLASS() et QAXFACTORY_END().
Le contrôle ActiveX de cet exemple est un QWidget avec un QSlider, un QLCDNumber et un QLineEdit. Il fournit une interface signal/emplacement/propriété pour modifier les valeurs du curseur et de la ligne d'édition, et pour être averti de tout changement de propriété.
L'implémentation Qt de l'ActiveX pour cet exemple est la suivante
class QSimpleAX : public QWidget, public QAxBindable { Q_OBJECT Q_CLASSINFO("ClassID", "{DF16845C-92CD-4AAB-A982-EB9840E74669}") Q_CLASSINFO("InterfaceID", "{616F620B-91C5-4410-A74E-6B81C76FFFE0}") Q_CLASSINFO("EventsID", "{E1816BBA-BF5D-4A31-9855-D6BA432055FF}") Q_PROPERTY(QString text READ text WRITE setText) Q_PROPERTY(int value READ value WRITE setValue) public: explicit QSimpleAX(QWidget *parent = nullptr) : QWidget(parent) { QVBoxLayout *vbox = new QVBoxLayout(this); m_slider = new QSlider(Qt::Horizontal, this); m_LCD = new QLCDNumber(3, this); m_edit = new QLineEdit(this); connect(m_slider, &QAbstractSlider::valueChanged, this, &QSimpleAX::setValue); connect(m_edit, &QLineEdit::textChanged, this, &QSimpleAX::setText); vbox->addWidget(m_slider); vbox->addWidget(m_LCD); vbox->addWidget(m_edit); } QString text() const { return m_edit->text(); } int value() const { return m_slider->value(); } signals: void someSignal(); void valueChanged(int); void textChanged(const QString&); public slots: void setText(const QString &string) { if (!requestPropertyChange("text")) return; QSignalBlocker blocker(m_edit); m_edit->setText(string); emit someSignal(); emit textChanged(string); propertyChanged("text"); } void about() { QMessageBox::information( this, "About QSimpleAX", "This is a Qt widget, and this slot has been\n" "called through ActiveX/OLE automation!" ); } void setValue(int i) { if (!requestPropertyChange("value")) return; QSignalBlocker blocker(m_slider); m_slider->setValue(i); m_LCD->display(i); emit valueChanged(i); propertyChanged("value"); } private: QSlider *m_slider; QLCDNumber *m_LCD; QLineEdit *m_edit; };
Le contrôle est exporté en utilisant la valeur par défaut QAxFactory
QAXFACTORY_BEGIN(
"{EC08F8FC-2754-47AB-8EFE-56A54057F34E}", // type library ID
"{A095BA0C-224F-4933-A458-2DD7F6B85D8F}") // application ID
QAXCLASS(QSimpleAX)
QAXFACTORY_END()Pour construire l'exemple, vous devez d'abord construire la bibliothèque QAxServer. Ensuite, exécutez qmake et votre outil make sur examples/activeqt/simple.
La démonstration nécessite que votre navigateur Web prenne en charge les contrôles ActiveX et que les scripts soient activés.
Le contrôle ActiveX simple est intégré à l'aide de la balise <object>.
<object ID="QSimpleAX" CLASSID="CLSID:DF16845C-92CD-4AAB-A982-EB9840E74669" CODEBASE="http://qt.nokia.com/demos/simpleax.cab"> <PARAM NAME="text" VALUE="A simple control" /> <PARAM NAME="value" VALUE="1" /> [Object not available! Did you forget to build and register the server?] </object>
Un simple bouton HTML est connecté au slot about() de l'ActiveQt.
<object ID="Calendar" CLASSID="CLSID:8E27C92B-1264-101C-8A2F-040224009C02"> [Standard Calendar control not available!] <PARAM NAME="day" VALUE="1" /> </object>
<FORM> <INPUT TYPE="BUTTON" VALUE="Today" onClick="Calendar.Today()" /> </FORM>
<SCRIPT LANGUAGE="VBScript"> Sub Calendar_Click() MsgBox( "Calendar Clicked!" ) End Sub Sub QSimpleAX_TextChanged( str ) document.title = str End Sub </SCRIPT> <SCRIPT LANGUAGE="JavaScript"> function QSimpleAX::ValueChanged( Newvalue ) { Calendar.Day = Newvalue; } </SCRIPT>
Un deuxième contrôle ActiveX - le contrôle de calendrier standard - est instancié
<object ID="Calendar" CLASSID="CLSID:8E27C92B-1264-101C-8A2F-040224009C02"> [Standard Calendar control not available!] <PARAM NAME="day" VALUE="1" /> </object>
Les événements provenant des contrôles ActiveX sont gérés à l'aide de Visual Basic Script et de JavaScript.
<SCRIPT LANGUAGE="VBScript"> Sub Calendar_Click() MsgBox( "Calendar Clicked!" ) End Sub Sub QSimpleAX_TextChanged( str ) document.title = str End Sub </SCRIPT> <SCRIPT LANGUAGE="JavaScript"> function QSimpleAX::ValueChanged( Newvalue ) { Calendar.Day = Newvalue; } </SCRIPT>
© 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.