Ich versuche, ein Signal von einem QObject zu einer Funktors zu verbinden, wie in der QT5 Dokumentation definiert:connect (QObject *, Signal (Signal()), Funktors) Verbinden nicht in QT5
http://doc.qt.io/qt-5/qobject.html#connect-5
relevante Code:
namespace someNamespace
{
void processFinished()
{
qDebug() << "A Thread has finished processing!!!";
}
void executeWorkerOnSeparateTread()
{
QThread* thread = new QThread;
Worker* worker = new Worker();
worker->moveToThread(thread);
QObject::connect(worker, SIGNAL(finished()), thread, SLOT(quit()));
QObject::connect(worker, SIGNAL(finished()), worker, SLOT(deleteLater()));
QObject::connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
QObject::connect(thread, SIGNAL(started()), worker, SLOT(process()));
QObject::connect(worker, SIGNAL(finished()), processFinished); //DOES NOT COMPILE
thread->start();
}
}
Wenn ich nur die Zeile auszukommen waren, die nicht kompiliert, dieser Code kompiliert und ausgeführt ohne Probleme. Ich kann diese Verbindung nicht zum Kompilieren bekommen.
Compilerfehler:
no matching function for call to 'QObject::connect(Worker*&, const char*, void(&)())'
natürlich Worker erbt QObject und hat das Q_OBJECT Schlüsselwort in ihm. Die Tatsache, dass dies ohne die problematische Linie funktioniert, eliminiert auch andere Linien, die das Problem darstellen.
Irgendwelche Ideen, was ich falsch mache ?? Es scheint mir, als sollte es so einfach sein.
Falls relevant, ist QT Version 5.8 und GCC Version 4.8.5.
Danke !!
Keine Antwort auf Ihr Problem, nur ein Kommentar: Warum verwenden Sie nicht die neue Kompilierzeit-checked 'connect'-Syntax? Du verwendest ein neues genug Qt, dass es verfügbar ist. Würde die hässlichen 'SIGNAL'- und' SLOT'-Makros loswerden und Ihnen Kompilierungszeitfehler geben, anstatt Laufzeitfehler, wenn eine Verbindung nicht hergestellt werden kann. –
@JesperJuhl Eigentlich denke ich, dass _is_ die Antwort ist. Wenn man sich die Docs anschaut, hat die statische Funktion 'connect()', die einen Funktor verwendet, keine Version, die die alte Signal/Slot-Syntax unterstützt. – MrEricSir
@MrEricSir Ich werde es als die Antwort einreichen, dann werden wir sehen, wie es beurteilt wird;) –