diff options
-rw-r--r-- | src/tools/moc/generator.cpp | 9 | ||||
-rw-r--r-- | tests/auto/tools/moc/tst_moc.cpp | 15 |
2 files changed, 18 insertions, 6 deletions
diff --git a/src/tools/moc/generator.cpp b/src/tools/moc/generator.cpp index 674398e783..db27067cf6 100644 --- a/src/tools/moc/generator.cpp +++ b/src/tools/moc/generator.cpp @@ -1483,10 +1483,7 @@ void Generator::generateSignal(FunctionDef *def,int index) } Q_ASSERT(!def->normalizedType.isEmpty()); - if (def->arguments.isEmpty() && def->normalizedType == "void") { - if (def->isPrivateSignal) - fprintf(out, "QPrivateSignal"); - + if (def->arguments.isEmpty() && def->normalizedType == "void" && !def->isPrivateSignal) { fprintf(out, ")%s\n{\n" " QMetaObject::activate(%s, &staticMetaObject, %d, nullptr);\n" "}\n", constQualifier, thisPtr.constData(), index); @@ -1503,7 +1500,7 @@ void Generator::generateSignal(FunctionDef *def,int index) if (def->isPrivateSignal) { if (!def->arguments.isEmpty()) fprintf(out, ", "); - fprintf(out, "QPrivateSignal"); + fprintf(out, "QPrivateSignal _t%d", offset++); } fprintf(out, ")%s\n{\n", constQualifier); @@ -1527,7 +1524,7 @@ void Generator::generateSignal(FunctionDef *def,int index) } int i; for (i = 1; i < offset; ++i) - if (def->arguments.at(i - 1).type.isVolatile) + if (i <= def->arguments.count() && def->arguments.at(i - 1).type.isVolatile) fprintf(out, ", const_cast<void*>(reinterpret_cast<const volatile void*>(&_t%d))", i); else fprintf(out, ", const_cast<void*>(reinterpret_cast<const void*>(&_t%d))", i); diff --git a/tests/auto/tools/moc/tst_moc.cpp b/tests/auto/tools/moc/tst_moc.cpp index 2d7ec2f0b5..7c05b388dc 100644 --- a/tests/auto/tools/moc/tst_moc.cpp +++ b/tests/auto/tools/moc/tst_moc.cpp @@ -2837,6 +2837,21 @@ void tst_Moc::privateSignalConnection() // We can't use function pointer connections to private signals which are overloaded because we would have to cast in this case to: // static_cast<void (ClassWithPrivateSignals::*)(int, ClassWithPrivateSignals::QPrivateSignal)>(&ClassWithPrivateSignals::overloadedMaybePrivate) // Which doesn't work as ClassWithPrivateSignals::QPrivateSignal is private. + + // Connecting from one private signal to another + { + ClassWithPrivateSignals classWithPrivateSignals1; + ClassWithPrivateSignals classWithPrivateSignals2; + SignalConnectionTester tester; + QObject::connect(&classWithPrivateSignals1, &ClassWithPrivateSignals::privateSignal1, + &classWithPrivateSignals2, &ClassWithPrivateSignals::privateSignal1); + QObject::connect(&classWithPrivateSignals2, &ClassWithPrivateSignals::privateSignal1, + &tester, &SignalConnectionTester::testSlot); + + QVERIFY(!tester.testPassed); + classWithPrivateSignals1.emitPrivateSignals(); + QVERIFY(tester.testPassed); + } } void tst_Moc::finalClasses_data() |