diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-05-27 12:26:00 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-05-29 10:14:28 +0200 |
commit | d3d9850a9200c9de898248884da32b510a1d4d4e (patch) | |
tree | 4bed48bbf841c96a793413f7dfe6a7035683d3e2 | |
parent | f5982f32cd38fb8b63522fe4390ac10eb2b1b157 (diff) |
Move some of the internal functions from QAxBase to QAxBasePrivate
By making the QAxWidget/ObjectPrivate inherit QAxBasePrivate, some
virtual internal functions can be moved there and QAxSignalBridge
can also be removed.
Change-Id: Ic53cb61afe3fb2a431c149b1b73697bbf287b6b0
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
-rw-r--r-- | src/activeqt/container/qaxbase.cpp | 80 | ||||
-rw-r--r-- | src/activeqt/container/qaxbase.h | 17 | ||||
-rw-r--r-- | src/activeqt/container/qaxbase_p.h | 27 | ||||
-rw-r--r-- | src/activeqt/container/qaxobject.cpp | 82 | ||||
-rw-r--r-- | src/activeqt/container/qaxobject.h | 7 | ||||
-rw-r--r-- | src/activeqt/container/qaxobject_p.h | 13 | ||||
-rw-r--r-- | src/activeqt/container/qaxwidget.cpp | 75 | ||||
-rw-r--r-- | src/activeqt/container/qaxwidget.h | 5 | ||||
-rw-r--r-- | src/activeqt/container/qaxwidget_p.h | 13 |
9 files changed, 154 insertions, 165 deletions
diff --git a/src/activeqt/container/qaxbase.cpp b/src/activeqt/container/qaxbase.cpp index dc0a63d..6e20ae4 100644 --- a/src/activeqt/container/qaxbase.cpp +++ b/src/activeqt/container/qaxbase.cpp @@ -392,8 +392,8 @@ public: int index = -1; // emit the generic signal "as is" - combase->d->signalBridge->emitSignal(QLatin1String(signame), - pDispParams->cArgs, pDispParams->rgvarg); + combase->d->emitSignal(QLatin1String(signame), + pDispParams->cArgs, pDispParams->rgvarg); HRESULT hres = S_OK; // get the signal information from the metaobject @@ -464,7 +464,7 @@ public: if (ok) { // emit the generated signal if everything went well - QAxBase::axBase_qt_static_metacall(combase, QMetaObject::InvokeMetaMethod, index - meta->methodOffset(), argv); + QAxBasePrivate::qtStaticMetaCall(combase, QMetaObject::InvokeMetaMethod, index - meta->methodOffset(), argv); // update the VARIANT for references and free memory for (p = 0; p < pcount; ++p) { bool out; @@ -509,7 +509,7 @@ public: return S_OK; // emit the generic signal - combase->d->signalBridge->emitPropertyChanged(QString::fromLatin1(propname)); + combase->d->emitPropertyChanged(QString::fromLatin1(propname)); QByteArray signame = propsigs.value(dispID); if (signame.isEmpty()) @@ -532,8 +532,8 @@ public: argv[1] = &var; // emit the "changed" signal - QAxBase::axBase_qt_static_metacall(combase, QMetaObject::InvokeMetaMethod, - index - meta->methodOffset(), argv); + QAxBasePrivate::qtStaticMetaCall(combase, QMetaObject::InvokeMetaMethod, + index - meta->methodOffset(), argv); } return S_OK; } @@ -573,8 +573,8 @@ public: \class QAxBasePrivate */ -QAxBasePrivate::QAxBasePrivate(QAxBase *b) - : q(b), useEventSink(true), useMetaObject(true), useClassInfo(true), +QAxBasePrivate::QAxBasePrivate() + : useEventSink(true), useMetaObject(true), useClassInfo(true), cachedMetaObject(false), initialized(false), tryCache(false) { // protect initialization @@ -598,7 +598,6 @@ QAxBasePrivate::~QAxBasePrivate() } CoFreeUnusedLibraries(); - delete signalBridge; } QByteArray QAxEventSink::findProperty(DISPID dispID) @@ -825,19 +824,9 @@ QVariant QAxBasePrivate::VARIANTToQVariant(const VARIANT &arg, const QByteArray */ /*! - Creates a QAxBase object that wraps the COM object \a iface. If \a - iface is 0 (the default), use setControl() to instantiate a COM - object. + Creates a QAxBase object. */ -QAxBase::QAxBase(IUnknown *iface) -{ - d = new QAxBasePrivate(this); - d->ptr = iface; - if (d->ptr) { - d->ptr->AddRef(); - d->initialized = true; - } -} +QAxBase::QAxBase() = default; /*! Shuts down the COM object and destroys the QAxBase object. @@ -848,9 +837,6 @@ QAxBase::~QAxBase() { clear(); - - delete d; - d = nullptr; } /*! @@ -1171,9 +1157,15 @@ bool QAxBase::initialize(IUnknown **ptr) /*! \internal */ -void QAxBase::axBaseInit(QAxBasePrivateSignalBridge *b) +void QAxBase::axBaseInit(QAxBasePrivate *b, IUnknown *iface) { - d->signalBridge = b; + d = b; + d->q = this; + d->ptr = iface; + if (d->ptr) { + d->ptr->AddRef(); + d->initialized = true; + } } /*! @@ -3044,7 +3036,7 @@ const QMetaObject *QAxBase::axBaseMetaObject() const { if (d->metaobj) return d->metaobj; - const QMetaObject* parentObject = parentMetaObject(); + const QMetaObject* parentObject = d->parentMetaObject(); if (!d->ptr && !d->initialized) { const_cast<QAxBase*>(this)->initialize(&d->ptr); @@ -3058,7 +3050,7 @@ const QMetaObject *QAxBase::axBaseMetaObject() const // return the default meta object if not yet initialized if (!d->ptr || !d->useMetaObject) - return fallbackMetaObject(); + return d->fallbackMetaObject(); MetaObjectGenerator generator(const_cast<QAxBase *>(this), d); return generator.metaObject(parentObject); @@ -3195,7 +3187,7 @@ void QAxBasePrivate::handleException(tagEXCEPINFO *exc, const QString &name) if (helpContext && !help.isEmpty()) help += QString::fromLatin1(" [%1]").arg(helpContext); - signalBridge->emitException(code, source, desc, help); + emitException(code, source, desc, help); if (!QAxEventSink::signalHasReceivers(q->qObject(), "exception(int,QString,QString,QString)")) { qWarning(R"(QAxBase: Error calling IDispatch member %s: Exception thrown by server Code : %d @@ -3485,10 +3477,7 @@ int QAxBase::internalInvoke(QMetaObject::Call call, int index, void **v) return index; } -/*! - \internal -*/ -int QAxBase::axBase_qt_static_metacall(QAxBase *_t, QMetaObject::Call _c, int _id, void **_a) +int QAxBasePrivate::qtStaticMetaCall(QAxBase *_t, QMetaObject::Call _c, int _id, void **_a) { if (_c != QMetaObject::InvokeMetaMethod) return 0; @@ -3507,25 +3496,22 @@ int QAxBase::axBase_qt_static_metacall(QAxBase *_t, QMetaObject::Call _c, int _i return 0; } -/*! - \internal -*/ -int QAxBase::axBase_qt_metacall(QMetaObject::Call call, int id, void **v) +int QAxBasePrivate::qtMetaCall(QMetaObject::Call call, int id, void **v) { - const QMetaObject *mo = axBaseMetaObject(); - if (isNull() && mo->property(id + mo->propertyOffset()).name() != QByteArray("control")) { + const QMetaObject *mo = q->axBaseMetaObject(); + if (q->isNull() && mo->property(id + mo->propertyOffset()).name() != QByteArray("control")) { qWarning("QAxBase::qt_metacall: Object is not initialized, or initialization failed"); return id; } switch(call) { case QMetaObject::InvokeMetaMethod: - id = axBase_qt_static_metacall(this, call, id, v); + id = qtStaticMetaCall(q, call, id, v); break; case QMetaObject::ReadProperty: case QMetaObject::WriteProperty: case QMetaObject::ResetProperty: - id = internalProperty(call, id, v); + id = q->internalProperty(call, id, v); break; case QMetaObject::QueryPropertyScriptable: case QMetaObject::QueryPropertyDesignable: @@ -4249,7 +4235,7 @@ QVariant QAxBase::asVariant() const } QVariant qvar; - QByteArray cn(className()); + QByteArray cn(d->className()); if (cn == "QAxObject" || cn == "QAxWidget" || cn == "QAxBase") { if (d->dispatch()) qvar.setValue(d->dispatch()); @@ -4287,13 +4273,19 @@ void *qax_createObjectWrapper(int metaType, IUnknown *iface) } /*! - \fn QObject *QAxBase::qObject() const \internal */ +QObject *QAxBase::qObject() const +{ + return d->qObject(); +} /*! - \fn const char *QAxBase::className() const \internal */ +const char *QAxBase::className() const +{ + return d->className(); +} QT_END_NAMESPACE diff --git a/src/activeqt/container/qaxbase.h b/src/activeqt/container/qaxbase.h index 498e9ee..51e1e5f 100644 --- a/src/activeqt/container/qaxbase.h +++ b/src/activeqt/container/qaxbase.h @@ -65,14 +65,12 @@ class QUuid; class QAxEventSink; class QAxObject; class QAxBasePrivate; -class QAxBasePrivateSignalBridge; class QAxBase { public: using PropertyBag = QMap<QString, QVariant>; - explicit QAxBase(IUnknown *iface = nullptr); virtual ~QAxBase(); QString control() const; @@ -99,11 +97,9 @@ public: QAxObject* querySubObject(const char *name, QList<QVariant> &vars); const QMetaObject *axBaseMetaObject() const; - int axBase_qt_metacall(QMetaObject::Call, int, void **); - static int axBase_qt_static_metacall(QAxBase *, QMetaObject::Call, int, void **); - virtual QObject *qObject() const = 0; - virtual const char *className() const = 0; + const char *className() const; + QObject *qObject() const; PropertyBag propertyBag() const; void setPropertyBag(const PropertyBag&); @@ -131,6 +127,8 @@ public: void setClassContext(ulong classContext); protected: + explicit QAxBase(); + virtual bool initialize(IUnknown** ptr); bool initializeRemote(IUnknown** ptr); bool initializeLicensed(IUnknown** ptr); @@ -147,8 +145,7 @@ protected: const QVariant &var5, const QVariant &var6, const QVariant &var7, const QVariant &var8); - virtual const QMetaObject *fallbackMetaObject() const = 0; - void axBaseInit(QAxBasePrivateSignalBridge *b); + void axBaseInit(QAxBasePrivate *b, IUnknown *iface = nullptr); private: enum DynamicCallHelperFlags { @@ -157,11 +154,11 @@ private: friend class QAxScript; friend class QAxEventSink; + friend class QAxBasePrivate; friend void *qax_createObjectWrapper(int, IUnknown*); bool initializeLicensedHelper(void *factory, const QString &key, IUnknown **ptr); - QAxBasePrivate *d; + QAxBasePrivate *d = nullptr; - virtual const QMetaObject *parentMetaObject() const = 0; int internalProperty(QMetaObject::Call, int index, void **v); int internalInvoke(QMetaObject::Call, int index, void **v); bool dynamicCallHelper(const char *name, void *out, QList<QVariant> &var, diff --git a/src/activeqt/container/qaxbase_p.h b/src/activeqt/container/qaxbase_p.h index d9c49cb..c7b11f2 100644 --- a/src/activeqt/container/qaxbase_p.h +++ b/src/activeqt/container/qaxbase_p.h @@ -76,25 +76,27 @@ QT_BEGIN_NAMESPACE class QAxBase; class QAxEventSink; -class QAxBasePrivateSignalBridge +class QAxBasePrivate { + Q_DISABLE_COPY_MOVE(QAxBasePrivate) public: - virtual ~QAxBasePrivateSignalBridge() = default; + using UuidEventSinkHash = QHash<QUuid, QAxEventSink*>; + + explicit QAxBasePrivate(); + ~QAxBasePrivate(); + + virtual QObject *qObject() const = 0; + virtual const char *className() const = 0; + virtual const QMetaObject *fallbackMetaObject() const = 0; + virtual const QMetaObject *parentMetaObject() const = 0; virtual void emitException(int code, const QString &source, const QString &desc, const QString &help) = 0; virtual void emitPropertyChanged(const QString &name) = 0; virtual void emitSignal(const QString &name, int argc, void *argv) = 0; -}; -class QAxBasePrivate -{ - Q_DISABLE_COPY_MOVE(QAxBasePrivate) -public: - using UuidEventSinkHash = QHash<QUuid, QAxEventSink*>; - - explicit QAxBasePrivate(QAxBase *b); - ~QAxBasePrivate(); + int qtMetaCall(QMetaObject::Call, int, void **); + static int qtStaticMetaCall(QAxBase *, QMetaObject::Call, int, void **); IDispatch *dispatch() const { @@ -111,7 +113,7 @@ public: static QVariant VARIANTToQVariant(const VARIANT &arg, const QByteArray &typeName, uint type = 0); - QAxBase *q; + QAxBase *q = nullptr; QString ctrl; UuidEventSinkHash eventSink; uint useEventSink :1; @@ -135,7 +137,6 @@ public: mutable QMap<QString, LONG> verbs; QMetaObject *metaobj = nullptr; - QAxBasePrivateSignalBridge *signalBridge = nullptr; }; QT_END_NAMESPACE diff --git a/src/activeqt/container/qaxobject.cpp b/src/activeqt/container/qaxobject.cpp index 4a30803..d19fede 100644 --- a/src/activeqt/container/qaxobject.cpp +++ b/src/activeqt/container/qaxobject.cpp @@ -60,31 +60,6 @@ QT_BEGIN_NAMESPACE -class QAxObjectSignalBridge : public QAxBasePrivateSignalBridge -{ -public: - explicit QAxObjectSignalBridge(QAxBaseObject *o) : m_o(o) {} - - void emitException(int code, const QString &source, const QString &desc, - const QString &help) override - { - emit m_o->exception(code, source, desc, help); - } - - void emitPropertyChanged(const QString &name) override - { - emit m_o->propertyChanged(name); - } - - void emitSignal(const QString &name, int argc, void *argv) override - { - emit m_o->signal(name, argc, argv); - } - -private: - QAxBaseObject *m_o; -}; - QAxBaseObject::QAxBaseObject(QObjectPrivate &d, QObject *parent) : QObject(d, parent) { @@ -156,6 +131,25 @@ QAxBaseObject::QAxBaseObject(QObjectPrivate &d, QObject *parent) \sa QAxBaseWidget::exception() */ +void QAxObjectPrivate::emitException(int code, const QString &source, const QString &desc, + const QString &help) +{ + Q_Q(QAxObject); + emit q->exception(code, source, desc, help); +} + +void QAxObjectPrivate::emitPropertyChanged(const QString &name) +{ + Q_Q(QAxObject); + emit q->propertyChanged(name); +} + +void QAxObjectPrivate::emitSignal(const QString &name, int argc, void *argv) +{ + Q_Q(QAxObject); + emit q->signal(name, argc, argv); +} + /*! \class QAxObject \brief The QAxObject class provides a QObject that wraps a COM object. @@ -195,7 +189,8 @@ QAxBaseObject::QAxBaseObject(QObjectPrivate &d, QObject *parent) QAxObject::QAxObject(QObject *parent) : QAxBaseObject(*new QAxObjectPrivate, parent) { - axBaseInit(new QAxObjectSignalBridge(this)); + Q_D(QAxObject); + axBaseInit(d); } /*! @@ -207,7 +202,8 @@ QAxObject::QAxObject(QObject *parent) QAxObject::QAxObject(const QString &c, QObject *parent) : QAxBaseObject(*new QAxObjectPrivate, parent) { - axBaseInit(new QAxObjectSignalBridge(this)); + Q_D(QAxObject); + axBaseInit(d); setControl(c); } @@ -216,9 +212,10 @@ QAxObject::QAxObject(const QString &c, QObject *parent) iface. \a parent is propagated to the QObject constructor. */ QAxObject::QAxObject(IUnknown *iface, QObject *parent) -: QAxBaseObject(*new QAxObjectPrivate, parent), QAxBase(iface) +: QAxBaseObject(*new QAxObjectPrivate, parent) { - axBaseInit(new QAxObjectSignalBridge(this)); + Q_D(QAxObject); + axBaseInit(d, iface); } /*! @@ -268,15 +265,12 @@ void QAxObjectPrivate::clear() */ void QAxObject::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { - QAxBase::axBase_qt_static_metacall(static_cast<QAxObject *>(_o), _c, _id, _a); + QAxBasePrivate::qtStaticMetaCall(static_cast<QAxObject *>(_o), _c, _id, _a); } -/*! - \internal -*/ -const QMetaObject *QAxObject::fallbackMetaObject() const +const QMetaObject *QAxObjectPrivate::fallbackMetaObject() const { - return &staticMetaObject; + return &QAxObject::staticMetaObject; } /*! @@ -287,10 +281,7 @@ const QMetaObject *QAxObject::metaObject() const return QAxBase::axBaseMetaObject(); } -/*! - \internal -*/ -const QMetaObject *QAxObject::parentMetaObject() const +const QMetaObject *QAxObjectPrivate::parentMetaObject() const { return &QAxBaseObject::staticMetaObject; } @@ -305,10 +296,12 @@ void *QAxObject::qt_metacast(const char *cname) return QAxBaseObject::qt_metacast(cname); } -/*! - \internal -*/ -const char *QAxObject::className() const +QObject* QAxObjectPrivate::qObject() const +{ + Q_Q(const QAxObject); + return static_cast<QObject *>(const_cast<QAxObject *>(q)); +} +const char *QAxObjectPrivate::className() const { return "QAxObject"; } @@ -318,10 +311,11 @@ const char *QAxObject::className() const */ int QAxObject::qt_metacall(QMetaObject::Call call, int id, void **v) { + Q_D(QAxObject); id = QAxBaseObject::qt_metacall(call, id, v); if (id < 0) return id; - return QAxBase::axBase_qt_metacall(call, id, v); + return d->qtMetaCall(call, id, v); } /*! diff --git a/src/activeqt/container/qaxobject.h b/src/activeqt/container/qaxobject.h index 70d92d2..c8a465f 100644 --- a/src/activeqt/container/qaxobject.h +++ b/src/activeqt/container/qaxobject.h @@ -79,9 +79,6 @@ class QAxObject : public QAxBaseObject, public QAxBase friend class QAxEventSink; Q_DECLARE_PRIVATE(QAxObject) public: - QObject* qObject() const override { return static_cast<QObject *>(const_cast<QAxObject *>(this)); } - const char *className() const override; - explicit QAxObject(QObject *parent = nullptr); explicit QAxObject(const QString &c, QObject *parent = nullptr); explicit QAxObject(IUnknown *iface, QObject *parent = nullptr); @@ -103,10 +100,6 @@ public: protected: void connectNotify(const QMetaMethod &signal) override; - const QMetaObject *fallbackMetaObject() const override; - -private: - const QMetaObject *parentMetaObject() const override; }; template <> inline QAxObject *qobject_cast<QAxObject*>(const QObject *o) diff --git a/src/activeqt/container/qaxobject_p.h b/src/activeqt/container/qaxobject_p.h index 43c8df1..f910887 100644 --- a/src/activeqt/container/qaxobject_p.h +++ b/src/activeqt/container/qaxobject_p.h @@ -64,14 +64,25 @@ #include <QtAxContainer/qaxobject.h> #include <private/qobject_p.h> +#include <private/qaxbase_p.h> QT_BEGIN_NAMESPACE -class QAxObjectPrivate : public QObjectPrivate +class QAxObjectPrivate : public QObjectPrivate, public QAxBasePrivate { Q_DECLARE_PUBLIC(QAxObject) public: void clear(); + + QObject* qObject() const override; + const char *className() const override; + const QMetaObject *fallbackMetaObject() const override; + const QMetaObject *parentMetaObject() const override; + + void emitException(int code, const QString &source, const QString &desc, + const QString &help) override; + void emitPropertyChanged(const QString &name) override; + void emitSignal(const QString &name, int argc, void *argv) override; }; QT_END_NAMESPACE diff --git a/src/activeqt/container/qaxwidget.cpp b/src/activeqt/container/qaxwidget.cpp index 5d2aa53..5c0a4ac 100644 --- a/src/activeqt/container/qaxwidget.cpp +++ b/src/activeqt/container/qaxwidget.cpp @@ -111,30 +111,24 @@ QT_BEGIN_NAMESPACE -class QAxWidgetSignalBridge : public QAxBasePrivateSignalBridge +void QAxWidgetPrivate::emitException(int code, const QString &source, const QString &desc, + const QString &help) { -public: - explicit QAxWidgetSignalBridge(QAxBaseWidget *w) : m_w(w) {} - - void emitException(int code, const QString &source, const QString &desc, - const QString &help) override - { - emit m_w->exception(code, source, desc, help); - } - - void emitPropertyChanged(const QString &name) override - { - emit m_w->propertyChanged(name); - } + Q_Q(QAxWidget); + emit q->exception(code, source, desc, help); +} - void emitSignal(const QString &name, int argc, void *argv) override - { - emit m_w->signal(name, argc, argv); - } +void QAxWidgetPrivate::emitPropertyChanged(const QString &name) +{ + Q_Q(QAxWidget); + emit q->propertyChanged(name); +} -private: - QAxBaseWidget *m_w; -}; +void QAxWidgetPrivate::emitSignal(const QString &name, int argc, void *argv) +{ + Q_Q(QAxWidget); + emit q->signal(name, argc, argv); +} /* \class QAxHostWidget \brief The QAxHostWidget class is the actual container widget. @@ -2068,7 +2062,8 @@ QAxBaseWidget::QAxBaseWidget(QWidgetPrivate &d, QWidget *parent, Qt::WindowFlags QAxWidget::QAxWidget(QWidget *parent, Qt::WindowFlags f) : QAxBaseWidget(*new QAxWidgetPrivate, parent, f) { - axBaseInit(new QAxWidgetSignalBridge(this)); + Q_D(QAxWidget); + axBaseInit(d); } /*! @@ -2080,7 +2075,8 @@ QAxWidget::QAxWidget(QWidget *parent, Qt::WindowFlags f) QAxWidget::QAxWidget(const QString &c, QWidget *parent, Qt::WindowFlags f) : QAxBaseWidget(*new QAxWidgetPrivate, parent, f) { - axBaseInit(new QAxWidgetSignalBridge(this)); + Q_D(QAxWidget); + axBaseInit(d); setControl(c); } @@ -2089,9 +2085,10 @@ QAxWidget::QAxWidget(const QString &c, QWidget *parent, Qt::WindowFlags f) \a parent and \a f are propagated to the QWidget contructor. */ QAxWidget::QAxWidget(IUnknown *iface, QWidget *parent, Qt::WindowFlags f) -: QAxBaseWidget(*new QAxWidgetPrivate, parent, f), QAxBase(iface) +: QAxBaseWidget(*new QAxWidgetPrivate, parent, f) { - axBaseInit(new QAxWidgetSignalBridge(this)); + Q_D(QAxWidget); + axBaseInit(d, iface); } /*! @@ -2274,15 +2271,12 @@ bool QAxWidget::doVerb(const QString &verb) */ void QAxWidget::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) { - QAxBase::axBase_qt_static_metacall(static_cast<QAxWidget *>(_o), _c, _id, _a); + QAxBasePrivate::qtStaticMetaCall(static_cast<QAxWidget *>(_o), _c, _id, _a); } -/*! - \internal -*/ -const QMetaObject *QAxWidget::fallbackMetaObject() const +const QMetaObject *QAxWidgetPrivate::fallbackMetaObject() const { - return &staticMetaObject; + return &QAxWidget::staticMetaObject; } /*! @@ -2293,10 +2287,7 @@ const QMetaObject *QAxWidget::metaObject() const return QAxBase::axBaseMetaObject(); } -/*! - \internal -*/ -const QMetaObject *QAxWidget::parentMetaObject() const +const QMetaObject *QAxWidgetPrivate::parentMetaObject() const { return &QAxBaseWidget::staticMetaObject; } @@ -2311,10 +2302,13 @@ void *QAxWidget::qt_metacast(const char *cname) return QAxBaseWidget::qt_metacast(cname); } -/*! - \internal -*/ -const char *QAxWidget::className() const +QObject* QAxWidgetPrivate::qObject() const +{ + Q_Q(const QAxWidget); + return static_cast<QObject *>(const_cast<QAxWidget *>(q)); +} + +const char *QAxWidgetPrivate::className() const { return "QAxWidget"; } @@ -2324,10 +2318,11 @@ const char *QAxWidget::className() const */ int QAxWidget::qt_metacall(QMetaObject::Call call, int id, void **v) { + Q_D(QAxWidget); id = QAxBaseWidget::qt_metacall(call, id, v); if (id < 0) return id; - return QAxBase::axBase_qt_metacall(call, id, v); + return d->qtMetaCall(call, id, v); } /*! diff --git a/src/activeqt/container/qaxwidget.h b/src/activeqt/container/qaxwidget.h index 25a6f75..c58422d 100644 --- a/src/activeqt/container/qaxwidget.h +++ b/src/activeqt/container/qaxwidget.h @@ -82,9 +82,6 @@ protected: class QAxWidget : public QAxBaseWidget, public QAxBase { public: - QObject* qObject() const override { return const_cast<QAxWidget *>(this); } - const char *className() const override; - explicit QAxWidget(QWidget* parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); explicit QAxWidget(const QString &c, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); explicit QAxWidget(IUnknown *iface, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); @@ -119,12 +116,10 @@ protected: virtual bool translateKeyEvent(int message, int keycode) const; void connectNotify(const QMetaMethod &signal) override; - const QMetaObject *fallbackMetaObject() const override; private: Q_DECLARE_PRIVATE(QAxWidget) friend class QAxClientSite; - const QMetaObject *parentMetaObject() const override; }; template <> inline QAxWidget *qobject_cast<QAxWidget*>(const QObject *o) diff --git a/src/activeqt/container/qaxwidget_p.h b/src/activeqt/container/qaxwidget_p.h index c0f8e7e..b327bed 100644 --- a/src/activeqt/container/qaxwidget_p.h +++ b/src/activeqt/container/qaxwidget_p.h @@ -64,17 +64,28 @@ #include <QtAxContainer/qaxwidget.h> #include <private/qwidget_p.h> +#include <private/qaxbase_p.h> QT_BEGIN_NAMESPACE class QAxClientSite; -class QAxWidgetPrivate : public QWidgetPrivate +class QAxWidgetPrivate : public QWidgetPrivate, public QAxBasePrivate { Q_DECLARE_PUBLIC(QAxWidget) public: void clear(); + QObject* qObject() const override; + const char *className() const override; + const QMetaObject *fallbackMetaObject() const override; + const QMetaObject *parentMetaObject() const override; + + void emitException(int code, const QString &source, const QString &desc, + const QString &help) override; + void emitPropertyChanged(const QString &name) override; + void emitSignal(const QString &name, int argc, void *argv) override; + QAxClientSite *container = nullptr; }; |