Home · All Classes · Main Classes · Annotated · Grouped Classes · Functions

Standard Qt widgets as ActiveX controls (in-process)

The ActiveX controls in this example are the standard button classes QPushButton, QCheckBox and QRadioButton as provided by Qt.

It demonstrates how to export existing QWidget classes as ActiveX controls, and the use of QAxFactory together with the QAXFACTORY_EXPORT macro.

    class ActiveQtFactory : public QAxFactory
    {
    public:
        ActiveQtFactory( const QUuid &lib, const QUuid &app )
            : QAxFactory( lib, app )
        {}
        QStringList featureList() const
        {
            QStringList list;
            list << "QCheckBox";
            list << "QRadioButton";
            list << "QPushButton";
            list << "QToolButton";
            return list;
        }
        QObject *createObject(const QString &key)
        {
            if ( key == "QCheckBox" )
                return new QCheckBox(0);
            if ( key == "QRadioButton" )
                return new QRadioButton(0);
            if ( key == "QPushButton" )
                return new QPushButton(0 );
            if ( key == "QToolButton" ) {
                QToolButton *tb = new QToolButton(0);
    //          tb->setIcon( QPixmap(fileopen) );
                return tb;
            }

            return 0;
        }
        const QMetaObject *metaObject( const QString &key ) const
        {
            if ( key == "QCheckBox" )
                return &QCheckBox::staticMetaObject;
            if ( key == "QRadioButton" )
                return &QRadioButton::staticMetaObject;
            if ( key == "QPushButton" )
                return &QPushButton::staticMetaObject;
            if ( key == "QToolButton" )
                return &QToolButton::staticMetaObject;

            return 0;
        }
        QUuid classID( const QString &key ) const
        {
            if ( key == "QCheckBox" )
                return "{6E795DE9-872D-43CF-A831-496EF9D86C68}";
            if ( key == "QRadioButton" )
                return "{AFCF78C8-446C-409A-93B3-BA2959039189}";
            if ( key == "QPushButton" )
                return "{2B262458-A4B6-468B-B7D4-CF5FEE0A7092}";
            if ( key == "QToolButton" )
                return "{7c0ffe7a-60c3-4666-bde2-5cf2b54390a1}";

            return QUuid();
        }
        QUuid interfaceID( const QString &key ) const
        {
            if ( key == "QCheckBox" )
                return "{4FD39DD7-2DE0-43C1-A8C2-27C51A052810}";
            if ( key == "QRadioButton" )
                return "{7CC8AE30-206C-48A3-A009-B0A088026C2F}";
            if ( key == "QPushButton" )
                return "{06831CC9-59B6-436A-9578-6D53E5AD03D3}";
            if ( key == "QToolButton" )
                return "{6726080f-d63d-4950-a366-9bf33e5cdf84}";

            return QUuid();
        }
        QUuid eventsID( const QString &key ) const
        {
            if ( key == "QCheckBox" )
                return "{FDB6FFBE-56A3-4E90-8F4D-198488418B3A}";
            if ( key == "QRadioButton" )
                return "{73EE4860-684C-4A66-BF63-9B9EFFA0CBE5}";
            if ( key == "QPushButton" )
                return "{3CC3F17F-EA59-4B58-BBD3-842D467131DD}";
            if ( key == "QToolButton" )
                return "{f4d421fd-4ead-4fd9-8a25-440766939639}";

            return QUuid();
        }
    };

The factory implementation returns the list of supported controls, creates controls on request and provides information about the unique IDs of the COM classes and interfaces for each control.

    QAXFACTORY_EXPORT( ActiveQtFactory, "{3B756301-0075-4E40-8BE8-5A81DE2426B7}", "{AB068077-4924-406a-BBAF-42D91C8727DD}" )

The factory is exported using the QAXFACTORY_EXPORT macro.

To build the example you must first build the QAxServer library. Then run qmake and your make tool in examples/wrapper.

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

A QPushButton:
[Object not available! Did you forget to build and register the server?]

A QCheckBox:
[Object not available! Did you forget to build and register the server?]

A QToolButton:
[Object not available! Did you forget to build and register the server?]

A QRadioButton:
[Object not available! Did you forget to build and register the server?]


Copyright © 2005 Trolltech Trademarks
Qt 4.0.0-b2