Ejemplo simple (ActiveQt)
El ejemplo Simple demuestra el uso de QAxBindable y QAxFactory.
El ejemplo Simple demuestra el uso de QAxBindable::requestPropertyChange() y QAxBindable::propertyChanged(), y el uso de QAxFactory a través de las macros QAXFACTORY_BEGIN(), QAXCLASS() y QAXFACTORY_END().
El control ActiveX de este ejemplo es un QWidget dispuesto con un QSlider, un QLCDNumber y un QLineEdit. Proporciona una interfaz señal/ranura/propiedad para cambiar los valores del deslizador y de la línea de edición, y para recibir notificaciones de cualquier cambio de propiedad.
La implementación Qt del ActiveX para este ejemplo es
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; };
El control se exporta utilizando el valor por defecto QAxFactory
QAXFACTORY_BEGIN(
"{EC08F8FC-2754-47AB-8EFE-56A54057F34E}", // type library ID
"{A095BA0C-224F-4933-A458-2DD7F6B85D8F}") // application ID
QAXCLASS(QSimpleAX)
QAXFACTORY_END()Para construir el ejemplo primero debes construir la librería QAxServer. Luego ejecute qmake y su herramienta make en examples/activeqt/simple.
La demostración requiere que tu WebBrowser soporte controles ActiveX, y que el scripting esté habilitado.
El control ActiveX simple se incrusta utilizando la etiqueta <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 botón HTML se conecta a la ranura about() del 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="Hoy" 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 segundo control ActiveX - el Control de Calendario estándar - es instanciado.
<object ID="Calendar" CLASSID="CLSID:8E27C92B-1264-101C-8A2F-040224009C02"> [Standard Calendar control not available!] <PARAM NAME="day" VALUE="1" /> </object>
Los eventos de los controles ActiveX se gestionan mediante Visual Basic Script y 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.