Exemple simple (ActiveQt)
L'exemple simple illustre l'utilisation de QAxBindable et QAxFactory.
L'exemple « Simple » illustre l'utilisation de ` QAxBindable::requestPropertyChange()` et ` QAxBindable::propertyChanged()`, ainsi que l'utilisation de ` QAxFactory ` via les macros ` QAXFACTORY_BEGIN()`, ` QAXCLASS() ` et ` QAXFACTORY_END() `.
Le contrôle ActiveX de cet exemple est un QWidget structuré comprenant un QSlider, un QLCDNumber et un QLineEdit. Il fournit une interface signal/slot/propriété permettant de modifier les valeurs du curseur et du champ de saisie, ainsi que d’être averti de tout changement de propriété.
L'implémentation Qt de l'ActiveX pour cet exemple est
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é à l’aide de 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 compiler l’exemple, vous devez d’abord compiler la bibliothèque QAxServer. Exécutez ensuite qmake et votre outil make dans le répertoire 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 relié au slot about() d'ActiveQt.
<FORM>
<INPUT TYPE="BUTTON" VALUE="About..." onClick="QSimpleAX.about()" />
</FORM>Un deuxième contrôle ActiveX – le contrôle 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 à la fois via Visual Basic Script et 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.