From d8e6be16033982caab3f50548aa9f19ed0349cb9 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Thu, 29 Nov 2012 21:32:47 +0100 Subject: [PATCH] Fix connecting to a functor with 3 arguments Task-number: QTBUG-28285 Change-Id: I07bd870c093482035728aa783d0ecbc8aa8670d2 Reviewed-by: Thiago Macieira --- src/corelib/kernel/qobjectdefs_impl.h | 2 +- .../corelib/kernel/qobject/tst_qobject.cpp | 53 ++++++++++++++++++- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/src/corelib/kernel/qobjectdefs_impl.h b/src/corelib/kernel/qobjectdefs_impl.h index 55a8904f765..7fd98006ac2 100644 --- a/src/corelib/kernel/qobjectdefs_impl.h +++ b/src/corelib/kernel/qobjectdefs_impl.h @@ -445,7 +445,7 @@ namespace QtPrivate { static void call(Function &f, void *, void **arg) { f( *reinterpret_cast::Value>::Type *>(arg[1]), *reinterpret_cast::Value>::Type *>(arg[2]), - *reinterpret_cast::Value>::Type *>(arg[4])), ApplyReturnValue(arg[0]); + *reinterpret_cast::Value>::Type *>(arg[3])), ApplyReturnValue(arg[0]); } }; template struct Functor diff --git a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp index c340d003616..cefbf6a17bb 100644 --- a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp +++ b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp @@ -5081,6 +5081,51 @@ namespace ManyArgumentNamespace { MANYARGUMENT_COMPARE(d); MANYARGUMENT_COMPARE(e); MANYARGUMENT_COMPARE(f); count++; } + + struct Funct1 { + void operator()(const QString &a) { + MANYARGUMENT_COMPARE(a); + count++; + } + }; + + struct Funct2 { + void operator()(const QString &a, const QString &b) { + MANYARGUMENT_COMPARE(a); MANYARGUMENT_COMPARE(b); + count++; + } + }; + + struct Funct3 { + void operator()(const QString &a, const QString &b, const QString &c) { + MANYARGUMENT_COMPARE(a); MANYARGUMENT_COMPARE(b); MANYARGUMENT_COMPARE(c); + count++; + } + }; + + struct Funct4 { + void operator()(const QString &a, const QString &b, const QString &c, const QString&d) { + MANYARGUMENT_COMPARE(a); MANYARGUMENT_COMPARE(b); MANYARGUMENT_COMPARE(c); + MANYARGUMENT_COMPARE(d); + count++; + } + }; + + struct Funct5 { + void operator()(const QString &a, const QString &b, const QString &c, const QString&d, const QString&e) { + MANYARGUMENT_COMPARE(a); MANYARGUMENT_COMPARE(b); MANYARGUMENT_COMPARE(c); + MANYARGUMENT_COMPARE(d); MANYARGUMENT_COMPARE(e); + count++; + } + }; + + struct Funct6 { + void operator()(const QString &a, const QString &b, const QString &c, const QString&d, const QString&e, const QString&f) { + MANYARGUMENT_COMPARE(a); MANYARGUMENT_COMPARE(b); MANYARGUMENT_COMPARE(c); + MANYARGUMENT_COMPARE(d); MANYARGUMENT_COMPARE(e); MANYARGUMENT_COMPARE(f); + count++; + } + }; } void tst_QObject::connectManyArguments() @@ -5128,10 +5173,16 @@ void tst_QObject::connectManyArguments() connect(&ob2, &ManyArgumentObject::signal6, ManyArgumentNamespace::slot4); connect(&ob2, &ManyArgumentObject::signal6, ManyArgumentNamespace::slot5); connect(&ob2, &ManyArgumentObject::signal6, ManyArgumentNamespace::slot6); + connect(&ob2, &ManyArgumentObject::signal6, ManyArgumentNamespace::Funct1()); + connect(&ob2, &ManyArgumentObject::signal6, ManyArgumentNamespace::Funct2()); + connect(&ob2, &ManyArgumentObject::signal6, ManyArgumentNamespace::Funct3()); + connect(&ob2, &ManyArgumentObject::signal6, ManyArgumentNamespace::Funct4()); + connect(&ob2, &ManyArgumentObject::signal6, ManyArgumentNamespace::Funct5()); + connect(&ob2, &ManyArgumentObject::signal6, ManyArgumentNamespace::Funct6()); emit ob2.signal6("a", "b", "c", "d", "e", "f"); QCOMPARE(ob2.count, 6); - QCOMPARE(ManyArgumentNamespace::count, 6); + QCOMPARE(ManyArgumentNamespace::count, 12); } class ReturnValue : public QObject {