Home | All Classes | Main Classes | Annotated | Grouped Classes | Functions |

# Two simple TQt widgets (in-process)

The ActiveX controls in this example are simple TQWidget subclasses reimplementing the paintEvent() method. The classes use the TQ_CLASSINFO macro to

The example demonstrates the use of the TQ_CLASSINFO macro to set ActiveTQt-specific attributes for TQObject sub classes, and the use of the TQAXFACTORY_BEGIN, TQAXCLASS and TQAXFACTORY_END macros.

        class TQAxWidget1 : public TQWidget
        {
            TQ_OBJECT
            TQ_CLASSINFO("ClassID", "{1D9928BD-4453-4bdd-903D-E525ED17FDE5}")
            TQ_CLASSINFO("InterfaceID", "{99F6860E-2C5A-42ec-87F2-43396F4BE389}")
            TQ_CLASSINFO("EventsID", "{0A3E9F27-E4F1-45bb-9E47-63099BCCD0E3}")

The class declaration includes the TQ_OBJECT macro to activate TQt's meta object system, and sets COM identifiers for the class using the TQ_CLASSINFO macro.

            TQ_PROPERTY( TQColor fillColor READ fillColor WRITE setFillColor )
        public:
            TQAxWidget1( TQWidget *parent = 0, const char *name = 0, WFlags f = 0 )
                : TQWidget( parent, name, f ), fill_color( red )
            {
            }

            TQColor fillColor() const
            {
                return fill_color;
            }
            void setFillColor( const TQColor &fc )
            {
                fill_color = fc;
                repaint();
            }

        protected:
            void paintEvent( TQPaintEvent *e )
            {
                TQPainter paint( this );
                TQRect r = rect();
                r.addCoords( 10, 10, -10, -10 );
                paint.fillRect( r, fill_color );
            }

        private:
            TQColor fill_color;
        };

The control draws a filled rectangle. The fill color is exposed as a property using the TQ_PROPERTY macro.

        class TQAxWidget2 : public TQWidget
        {
            TQ_OBJECT
            TQ_CLASSINFO("ClassID", "{58139D56-6BE9-4b17-937D-1B1EDEDD5B71}")
            TQ_CLASSINFO("InterfaceID", "{B66280AB-08CC-4dcc-924F-58E6D7975B7D}")
            TQ_CLASSINFO("EventsID", "{D72BACBA-03C4-4480-B4BB-DE4FE3AA14A0}")
            TQ_CLASSINFO("ToSuperClass", "TQAxWidget2")
            TQ_CLASSINFO("StockEvents", "yes")

The declaration of the second control class uses the TQ_CLASSINFO macro to set the COM identifiers as well as additional COM attributes for the class. Objects of that class will not expose the TQWidget API, and provide the ActiveX stock events (ie. Click, KeyDown etc.).

            TQ_PROPERTY( int lineWidth READ lineWidth WRITE setLineWidth )
        public:
            TQAxWidget2( TQWidget *parent = 0, const char *name = 0, WFlags f = 0 )
                : TQWidget( parent, name, f ), line_width( 1 )
            {
            }

            int lineWidth() const
            {
                return line_width;
            }
            void setLineWidth( int lw )
            {
                line_width = lw;
                repaint();
            }

        protected:
            void paintEvent( TQPaintEvent *e )
            {
                TQPainter paint( this );
                TQPen pen = paint.pen();
                pen.setWidth( line_width );
                paint.setPen( pen );

                TQRect r = rect();
                r.addCoords( 10, 10, -10, -10 );
                paint.drawEllipse( r );
            }

        private:
            int line_width;
        };

The control draws a circle. The line width is exposed as a property using the TQ_PROPERTY macro.

The controls are exposed by the implementation of TQAxFactory as provided by the TQAXFACTORY_BEGIN and TQAXFACTORY_END macros.

        #include <qaxfactory.h>

        #include "ax1.h"
        #include "ax2.h"

        TQAXFACTORY_BEGIN("{98DE28B6-6CD3-4e08-B9FA-3D1DB43F1D2F}", "{05828915-AD1C-47ab-AB96-D6AD1E25F0E2}")

The factory is initialied using the TQAXFACTORY_BEGIN macro, providing the IDs for the application and the type library.

            TQAXCLASS(TQAxWidget1)
            TQAXCLASS(TQAxWidget2)

The classes exposed are listed using the TQAXCLASS macro.

        TQAXFACTORY_END()

Finally the factory declaration is closed using the TQAXFACTORY_END macro.

To build the example you must first build the TQAxServer library. Then run qmake and your make tool in `examples/multiple`.

The demonstration requires your WebBrowser to support ActiveX controls, and scripting to be enabled.

        <script language=javascript>
        function setColor( form )
        {
            Ax1.fillColor = form.colorEdit.value;
        }

        function setWidth( form )
        {
            Ax2.lineWidth = form.widthEdit.value;
        }
        </script>

        <p>
        This is one TQWidget 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 TQWidget 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>

See also The TQAxServer Examples.