<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <!-- /tmp/qt-4.3.4-qt-1203442408707/qt-x11-opensource-src-4.3.4/doc/src/examples/activeqt/multiple.qdoc --> <head> <title>Qt 4.3: Multiple Example (ActiveQt)</title> <link href="classic.css" rel="stylesheet" type="text/css" /> </head> <body> <table border="0" cellpadding="0" cellspacing="0" width="100%"> <tr> <td align="left" valign="top" width="32"><a href="http://www.trolltech.com/products/qt"><img src="images/qt-logo.png" align="left" width="32" height="32" border="0" /></a></td> <td width="1"> </td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a> · <a href="classes.html"><font color="#004faf">All Classes</font></a> · <a href="mainclasses.html"><font color="#004faf">Main Classes</font></a> · <a href="groups.html"><font color="#004faf">Grouped Classes</font></a> · <a href="modules.html"><font color="#004faf">Modules</font></a> · <a href="functions.html"><font color="#004faf">Functions</font></a></td> <td align="right" valign="top" width="230"><a href="http://www.trolltech.com"><img src="images/trolltech-logo.png" align="right" width="203" height="32" border="0" /></a></td></tr></table><h1 align="center">Multiple Example (ActiveQt)<br /><small></small></h1> <p>Files:</p> <ul> <li><a href="activeqt-multiple-ax1-h.html">activeqt/multiple/ax1.h</a></li> <li><a href="activeqt-multiple-ax2-h.html">activeqt/multiple/ax2.h</a></li> <li><a href="activeqt-multiple-main-cpp.html">activeqt/multiple/main.cpp</a></li> </ul> <p>The Multiple example demonstrates the implementation of a <a href="qaxfactory.html">QAxFactory</a> to provide multiple ActiveX controls in a single in process ActiveX server using the <tt>QAXFACTORY_EXPORT()</tt> macro. The ActiveX controls in this example are simple <a href="qwidget.html">QWidget</a> subclasses that reimplement <a href="qwidget.html#paintEvent">QWidget::paintEvent</a>().</p> <pre> class QAxWidget1 : public QWidget { Q_OBJECT Q_CLASSINFO("ClassID", "{1D9928BD-4453-4bdd-903D-E525ED17FDE5}") Q_CLASSINFO("InterfaceID", "{99F6860E-2C5A-42ec-87F2-43396F4BE389}") Q_CLASSINFO("EventsID", "{0A3E9F27-E4F1-45bb-9E47-63099BCCD0E3}") Q_PROPERTY(QColor fillColor READ fillColor WRITE setFillColor) public: QAxWidget1(QWidget *parent = 0) : QWidget(parent), fill_color(Qt::red) { } QColor fillColor() const { return fill_color; } void setFillColor(const QColor &fc) { fill_color = fc; repaint(); } protected: void paintEvent(QPaintEvent *e) { QPainter paint(this); QRect r = rect(); r.adjust(10, 10, -10, -10); paint.fillRect(r, fill_color); } private: QColor fill_color; };</pre> <p>The first control draws a filled rectangle. The fill color is exposed as a property. <tt>Q_CLASSINFO()</tt> is used to specify the COM identifiers.</p> <pre> class QAxWidget2 : public QWidget { Q_OBJECT Q_CLASSINFO("ClassID", "{58139D56-6BE9-4b17-937D-1B1EDEDD5B71}") Q_CLASSINFO("InterfaceID", "{B66280AB-08CC-4dcc-924F-58E6D7975B7D}") Q_CLASSINFO("EventsID", "{D72BACBA-03C4-4480-B4BB-DE4FE3AA14A0}") Q_CLASSINFO("ToSuperClass", "QAxWidget2") Q_CLASSINFO("StockEvents", "yes") Q_CLASSINFO("Insertable", "yes") Q_PROPERTY( int lineWidth READ lineWidth WRITE setLineWidth ) public: QAxWidget2(QWidget *parent = 0) : QWidget(parent), line_width( 1 ) { } int lineWidth() const { return line_width; } void setLineWidth( int lw ) { line_width = lw; repaint(); } protected: void paintEvent( QPaintEvent *e ) { QPainter paint( this ); QPen pen = paint.pen(); pen.setWidth( line_width ); paint.setPen( pen ); QRect r = rect(); r.adjust( 10, 10, -10, -10 ); paint.drawEllipse( r ); } private: int line_width; };</pre> <p>The second control draws a circle. The linewith is exposed as a property. <tt>Q_CLASSINFO()</tt> is used to specify the COM identifiers, and to set the attributes <i>ToSuperClass</i> and <i>StockEvents</i> to expose only the API of the class itself, and to add COM stock events to the ActiveX control.</p> <pre> #include "ax1.h" #include "ax2.h" #include <QAxFactory> QAXFACTORY_BEGIN("{98DE28B6-6CD3-4e08-B9FA-3D1DB43F1D2F}", "{05828915-AD1C-47ab-AB96-D6AD1E25F0E2}") QAXCLASS(QAxWidget1) QAXCLASS(QAxWidget2) QAXFACTORY_END()</pre> <p>The classes are exported from the server using the <a href="qaxfactory.html">QAxFactory</a> macros.</p> <p>To build the example you must first build the <a href="qaxserver.html">QAxServer</a> library. Then run <tt>qmake</tt> and your make tool in <tt>examples/activeqt/multiple</tt>.</p> <p>The <a href="qaxserver-demo-multiple.html">demonstration</a> requires your WebBrowser to support ActiveX controls, and scripting to be enabled.</p> <pre> <script language="javascript"> function setColor( form ) { Ax1.fillColor = form.colorEdit.value; } function setWidth( form ) { Ax2.lineWidth = form.widthEdit.value; } </script> <p /> This is one QWidget subclass:<br /> <object ID="Ax1" CLASSID="CLSID:1D9928BD-4453-4bdd-903D-E525ED17FDE5" CODEBASE="http://www.trolltech.com/demos/multipleax.cab"> [Object not available! Did you forget to build and register the server?] </object><br /> <form> Fill Color: <input type="edit" ID="colorEdit" value = "red" /> <input type="button" value = "Set" onClick="setColor(this.form)" /> <input type="button" value = "Hide" onClick="Ax1.hide()" /> <input type="button" value = "Show" onClick="Ax1.show()" /> </form> <p /> This is another QWidget subclass:<br /> <object ID="Ax2" CLASSID="CLSID:58139D56-6BE9-4b17-937D-1B1EDEDD5B71" CODEBASE="http://www.trolltech.com/demos/multipleax.cab"> [Object not available! Did you forget to build and register the server?] </object><br /> <form> Line width: <input type="edit" ID="widthEdit" value = "1" /> <input type="button" value = "Set" onClick="setWidth(this.form)" /> </form></pre> <p /><address><hr /><div align="center"> <table width="100%" cellspacing="0" border="0"><tr class="address"> <td width="30%">Copyright © 2008 <a href="trolltech.html">Trolltech</a></td> <td width="40%" align="center"><a href="trademarks.html">Trademarks</a></td> <td width="30%" align="right"><div align="right">Qt 4.3.4</div></td> </tr></table></div></address></body> </html>