Je tente de connecter un signal d'un QObject à un foncteur tel que défini dans la documentation QT5:connexion (QObject *, SIGNAL (signal()), foncteur) ne se connecte pas à QT5
http://doc.qt.io/qt-5/qobject.html#connect-5
Code pertinent:
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();
}
}
Si je devais commenter simplement la ligne qui ne compile pas, ce code compile et exécute sans problème. Je ne peux pas obtenir cette connexion pour compiler.
erreur du compilateur:
no matching function for call to 'QObject::connect(Worker*&, const char*, void(&)())'
bien sûr des travailleurs et a QObject hérite le mot-clé Q_OBJECT en elle. le fait que cela fonctionne sans la ligne problématique élimine également d'autres lignes étant le problème.
Des idées sur ce que je fais mal ?? Il me semble que ça devrait être aussi simple.
Le cas échéant, la version QT est 5.8 et la version GCC est 4.8.5.
Merci!
Pas une réponse à votre problème, juste un commentaire: pourquoi n'utilisez-vous pas la nouvelle syntaxe 'connect' vérifiée à la compilation? Vous utilisez un Qt assez nouveau pour qu'il soit disponible. Débarrasserait des macros 'SIGNAL' et' SLOT' moche et vous donnerait des erreurs de temps de compilation plutôt que des erreurs de temps d'exécution quand une connexion ne peut pas être faite. –
@JesperJuhl En fait, je pense que c'est la réponse. En regardant les docs, la fonction statique 'connect()' qui prend un foncteur n'a pas de version qui supporte l'ancienne syntaxe signal/slot. – MrEricSir
@MrEricSir Je vais soumettre comme la réponse, alors nous verrons comment il est jugé;) –