From e13b0cc4a08871af0fd4414f63d466712e0105d2 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Sun, 26 Jan 2014 14:02:51 +0100 Subject: [PATCH] Fix usage of QObjectPrivate::connect when q_func() is private. q_func() which is declared in Q_DECLARE_PUBLIC is usually private. We should use q_ptr directly in QObjectPrivate::connect, otherwise it does not compile when trying to access the private q_func Change-Id: I235165a0994327102dbb31c390c2cafdffe806dc Reviewed-by: Kurt Pattyn Reviewed-by: Frederik Gladhorn --- src/corelib/kernel/qobject_p.h | 4 ++-- tests/auto/corelib/kernel/qobject/tst_qobject.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h index 9df438b518f..180887b3702 100644 --- a/src/corelib/kernel/qobject_p.h +++ b/src/corelib/kernel/qobject_p.h @@ -338,7 +338,7 @@ inline QMetaObject::Connection QObjectPrivate::connect(const typename QtPrivate: types = QtPrivate::ConnectionTypes::types(); return QObject::connectImpl(sender, reinterpret_cast(&signal), - receiverPrivate->q_func(), reinterpret_cast(&slot), + receiverPrivate->q_ptr, reinterpret_cast(&slot), new QtPrivate::QPrivateSlotObject::Value, typename SignalType::ReturnType>(slot), type, types, &SignalType::Object::staticMetaObject); @@ -356,7 +356,7 @@ bool QObjectPrivate::disconnect(const typename QtPrivate::FunctionPointer< Func1 Q_STATIC_ASSERT_X((QtPrivate::CheckCompatibleArguments::value), "Signal and slot arguments are not compatible."); return QObject::disconnectImpl(sender, reinterpret_cast(&signal), - receiverPrivate->q_func(), reinterpret_cast(&slot), + receiverPrivate->q_ptr, reinterpret_cast(&slot), &SignalType::Object::staticMetaObject); } diff --git a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp index b6be7f0f3e2..ac8aae8d3a8 100644 --- a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp +++ b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp @@ -5564,8 +5564,8 @@ public: }; class ConnectToPrivateSlotPrivate : public QObjectPrivate { -public: Q_DECLARE_PUBLIC(ConnectToPrivateSlot) +public: int receivedCount; QVariant receivedValue;