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

Qt Widget Hierarchy (in-process)

The ActiveX control in this example is a QWidget subclass with child widgets that are accessible as sub types.

    class QParentWidget : public QVBoxWidget
    {
        Q_OBJECT
        Q_CLASSINFO("ClassID", "{d574a747-8016-46db-a07c-b2b4854ee75c}");
        Q_CLASSINFO("InterfaceID", "{4a30719d-d9c2-4659-9d16-67378209f822}");
    public:
        QParentWidget(QWidget *parent = 0);

        QSize sizeHint() const;

    public slots:
        void createSubWidget( const QString &name );

        QSubWidget *subWidget( const QString &name );

    private:
        QVBoxLayout *vbox;
    };

The QParentWidget class provides slots to create a widget with a name, and to return a pointer to a named widget. The class declaration uses Q_CLASSINFO to provide the COM identifiers for this class.

    QParentWidget::QParentWidget(QWidget *parent)
    : QVBoxWidget(parent)
    {
    }

The constructor of QParentWidget creates a vertical box layout. New child widgets are automatically added to the layout.

    void QParentWidget::createSubWidget(const QString &name)
    {
        QSubWidget *sw = new QSubWidget(this, name);
        sw->setLabel(name);
        sw->show();
    }

The createSubWidget slot creates a new QSubWidget with the name provided in the parameter, and sets the label to that name. The widget is also shown explicitly.

    QSubWidget *QParentWidget::subWidget(const QString &name)
    {
        return qFindChild<QSubWidget*>(this, name);
    }

The subWidget slot uses the QObject::child() function and returns the first child of type QSubWidget that has the requested name.

    class QSubWidget : public QWidget
    {
        Q_OBJECT
        Q_PROPERTY( QString label READ label WRITE setLabel )

        Q_CLASSINFO("ClassID", "{850652f4-8f71-4f69-b745-bce241ccdc30}");
        Q_CLASSINFO("InterfaceID", "{2d76cc2f-3488-417a-83d6-debff88b3c3f}");
        Q_CLASSINFO("ToSuperClass", "QSubWidget");

    public:
        QSubWidget(QWidget *parent = 0, const QString &name = QString());

        void setLabel( const QString &text );
        QString label() const;

        QSize sizeHint() const;

    protected:
        void paintEvent( QPaintEvent *e );

    private:
        QString lbl;
    };

The QSubWidget class has a single string-property label, and implements the paintEvent to draw the label. The class uses again Q_CLASSINFO to provide the COM identifiers, and also sets the ToSuperClass attribute to QSubWidget, to ensure that only no slots of any superclasses (i.e. QWidget) are exposed.

    QSubWidget::QSubWidget(QWidget *parent, const QString &name)
    : QWidget(parent)
    {
        setObjectName(name);
    }

    void QSubWidget::setLabel(const QString &text)
    {
        lbl = text;
        setObjectName(text);
        update();
    }

    QString QSubWidget::label() const
    {
        return lbl;
    }

    QSize QSubWidget::sizeHint() const
    {
        QFontMetrics fm(font());
        return QSize(fm.width(lbl), fm.height());
    }

    void QSubWidget::paintEvent(QPaintEvent *)
    {
        QPainter painter(this);
        painter.setPen(palette().text().color());
        painter.drawText(rect(), Qt::AlignCenter, lbl);
    }

The implementation of the QSubWidget class is self-explanatory.

    #include "objects.h"
    #include <qaxfactory.h>

    QAXFACTORY_BEGIN("{9e626211-be62-4d18-9483-9419358fbb03}", "{75c276de-1df5-451f-a004-e4fa1a587df1}")
        QAXCLASS(QParentWidget)
        QAXTYPE(QSubWidget)
    QAXFACTORY_END()

The classes are then exported using a QAxFactory. QParentWidget is exported as a full class (which can be created ), while QSubWidget is only exported as a type, which can only be created indirectly through APIs of QParentWidget.

To build the example you must first build the QAxServer 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.

This is one QWidget subclass:
[Object not available! Did you forget to build and register the server?]

Fill Color:

This is another QWidget subclass:
[Object not available! Did you forget to build and register the server?]

Line width:


Copyright © 2004 Trolltech Trademarks
Qt 4.0.0-b1