diff options
author | Friedemann Kleint <Friedemann.Kleint@digia.com> | 2014-12-05 14:08:09 +0100 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> | 2014-12-08 09:31:50 +0100 |
commit | cece05b212a78b2d98c32be0bcb733aa0cc7fec1 (patch) | |
tree | 4349364c62a3ad48d748a01e088d2926be764399 | |
parent | 30f5f9fd247f7454e008c1893f70ef1099cbb835 (diff) | |
download | qtactiveqt-cece05b212a78b2d98c32be0bcb733aa0cc7fec1.tar.gz |
De-inline QAxAggregated::widget().
The QWidget-class definition might not be present when
using QAxAggregate with QAxWindow.
Task-number: QTBUG-41130
Change-Id: Ib8f2097ebdc6af13e3f1e1b51bfcd23512564c0b
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
-rw-r--r-- | src/activeqt/control/control.pro | 3 | ||||
-rw-r--r-- | src/activeqt/control/qaxaggregated.cpp | 141 | ||||
-rw-r--r-- | src/activeqt/control/qaxaggregated.h | 9 | ||||
-rw-r--r-- | src/activeqt/control/qaxbindable.cpp | 86 |
4 files changed, 147 insertions, 92 deletions
diff --git a/src/activeqt/control/control.pro b/src/activeqt/control/control.pro index 20a5ea3..c579ce8 100644 --- a/src/activeqt/control/control.pro +++ b/src/activeqt/control/control.pro @@ -10,7 +10,8 @@ HEADERS = qaxaggregated.h \ qaxfactory.h \ ../shared/qaxtypes.h -SOURCES = qaxserver.cpp \ +SOURCES = qaxaggregated.cpp \ + qaxserver.cpp \ qaxserverbase.cpp \ qaxbindable.cpp \ qaxfactory.cpp \ diff --git a/src/activeqt/control/qaxaggregated.cpp b/src/activeqt/control/qaxaggregated.cpp new file mode 100644 index 0000000..4815ed8 --- /dev/null +++ b/src/activeqt/control/qaxaggregated.cpp @@ -0,0 +1,141 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the ActiveQt framework of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:BSD$ +** You may use this file under the terms of the BSD license as follows: +** +** "Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are +** met: +** * Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** * Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in +** the documentation and/or other materials provided with the +** distribution. +** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names +** of its contributors may be used to endorse or promote products derived +** from this software without specific prior written permission. +** +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qaxaggregated.h" + +#ifdef QT_WIDGETS_LIB +# include <QtWidgets/QWidget> +#endif + +QT_BEGIN_NAMESPACE + +/*! + \class QAxAggregated + \brief The QAxAggregated class is an abstract base class for implementations of + additional COM interfaces. + + \inmodule QAxServer + + Create a subclass of QAxAggregated and reimplement + queryInterface() to support additional COM interfaces. Use + multiple inheritance from those COM interfaces. Implement the + IUnknown interface of those COM interfaces by delegating the + calls to \c QueryInterface(), \c AddRef() and \c Release() to the + interface provided by controllingUnknown(). + + Use the widget() method if you need to make calls to the QWidget + implementing the ActiveX control. You must not store that pointer + in your subclass (unless you use QPointer), as the QWidget can + be destroyed by the ActiveQt framework at any time. + + \sa QAxBindable, QAxFactory, {Active Qt} +*/ + +/*! + \fn QAxAggregated::~QAxAggregated() + + The destructor is called internally by Qt. +*/ + +/*! + \fn long QAxAggregated::queryInterface(const QUuid &iid, void **iface) + + Reimplement this pure virtual function to support additional COM + interfaces. Set the value of \a iface to point to this object to + support the interface \a iid. Note that you must cast the \c + this pointer to the appropriate superclass. + + \snippet src_activeqt_control_qaxbindable.cpp 2 + + Return the standard COM results \c S_OK (interface is supported) + or \c E_NOINTERFACE (requested interface is not supported). + + \warning + Even though you must implement the \c IUnknown interface if you + implement any COM interface you must not support the \c IUnknown + interface in your queryInterface() implementation. +*/ + +/*! + \fn IUnknown *QAxAggregated::controllingUnknown() const + + Returns the \c IUnknown interface of the ActiveX control. Implement + the \c IUnknown interface in your QAxAggregated subclass to + delegate calls to \c QueryInterface(), \c AddRef(), and \c + Release() to the interface provided by this function. + + \snippet src_activeqt_control_qaxbindable.cpp 3 + + Instead of declaring and implementing these three functions + manually, you can use the \c QAXAGG_IUNKNOWN macro in the class + declaration of your subclass. +*/ + +/*! + \fn QObject *QAxAggregated::object() const + + Returns a pointer to the QObject subclass implementing the COM object. + This function might return 0. + + \warning + You must not store the returned pointer, unless you use a + QPointer, since the QObject can be destroyed by ActiveQt at any + time. +*/ + +/*! + Returns a pointer to the QWidget subclass implementing the ActiveX control. + This function might return 0. + + \warning + You must not store the returned pointer, unless you use a + QPointer, since the QWidget can be destroyed by ActiveQt at any + time. +*/ +QWidget *QAxAggregated::widget() const +{ +#ifdef QT_WIDGETS_LIB + return qobject_cast<QWidget*>(the_object); +#else + return 0; +#endif +} + +QT_END_NAMESPACE diff --git a/src/activeqt/control/qaxaggregated.h b/src/activeqt/control/qaxaggregated.h index 5ed5235..4b9734c 100644 --- a/src/activeqt/control/qaxaggregated.h +++ b/src/activeqt/control/qaxaggregated.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the ActiveQt framework of the Qt Toolkit. @@ -47,6 +47,8 @@ struct IUnknown; QT_BEGIN_NAMESPACE +class QWidget; + class QUuid; class QAxAggregated @@ -62,10 +64,7 @@ protected: inline IUnknown *controllingUnknown() const { return controlling_unknown; } - inline QWidget *widget() const - { - return qobject_cast<QWidget*>(the_object); - } + QWidget *widget() const; inline QObject *object() const { return the_object; } private: diff --git a/src/activeqt/control/qaxbindable.cpp b/src/activeqt/control/qaxbindable.cpp index 23f6244..bf6b554 100644 --- a/src/activeqt/control/qaxbindable.cpp +++ b/src/activeqt/control/qaxbindable.cpp @@ -233,90 +233,4 @@ bool QAxBindable::writeData(QIODevice *sink) return false; } -/*! - \class QAxAggregated - \brief The QAxAggregated class is an abstract base class for implementations of - additional COM interfaces. - - \inmodule QAxServer - - Create a subclass of QAxAggregated and reimplement - queryInterface() to support additional COM interfaces. Use - multiple inheritance from those COM interfaces. Implement the - IUnknown interface of those COM interfaces by delegating the - calls to \c QueryInterface(), \c AddRef() and \c Release() to the - interface provided by controllingUnknown(). - - Use the widget() method if you need to make calls to the QWidget - implementing the ActiveX control. You must not store that pointer - in your subclass (unless you use QPointer), as the QWidget can - be destroyed by the ActiveQt framework at any time. - - \sa QAxBindable, QAxFactory, {Active Qt} -*/ - -/*! - \fn QAxAggregated::~QAxAggregated() - - The destructor is called internally by Qt. -*/ - -/*! - \fn long QAxAggregated::queryInterface(const QUuid &iid, void **iface) - - Reimplement this pure virtual function to support additional COM - interfaces. Set the value of \a iface to point to this object to - support the interface \a iid. Note that you must cast the \c - this pointer to the appropriate superclass. - - \snippet src_activeqt_control_qaxbindable.cpp 2 - - Return the standard COM results \c S_OK (interface is supported) - or \c E_NOINTERFACE (requested interface is not supported). - - \warning - Even though you must implement the \c IUnknown interface if you - implement any COM interface you must not support the \c IUnknown - interface in your queryInterface() implementation. -*/ - -/*! - \fn IUnknown *QAxAggregated::controllingUnknown() const - - Returns the \c IUnknown interface of the ActiveX control. Implement - the \c IUnknown interface in your QAxAggregated subclass to - delegate calls to \c QueryInterface(), \c AddRef(), and \c - Release() to the interface provided by this function. - - \snippet src_activeqt_control_qaxbindable.cpp 3 - - Instead of declaring and implementing these three functions - manually, you can use the \c QAXAGG_IUNKNOWN macro in the class - declaration of your subclass. -*/ - -/*! - \fn QObject *QAxAggregated::object() const - - Returns a pointer to the QObject subclass implementing the COM object. - This function might return 0. - - \warning - You must not store the returned pointer, unless you use a - QPointer, since the QObject can be destroyed by ActiveQt at any - time. -*/ - -/*! - \fn QWidget *QAxAggregated::widget() const - - Returns a pointer to the QWidget subclass implementing the ActiveX control. - This function might return 0. - - \warning - You must not store the returned pointer, unless you use a - QPointer, since the QWidget can be destroyed by ActiveQt at any - time. -*/ - QT_END_NAMESPACE |