Je me connecte lambdas aux signaux de QObject
:Comment passer Qt :: ConnectionType à QObject :: connect lors de la connexion d'un lambda?
QObject::connect(handle, &BatchHandle::progressMax, [this](const ProcessHandle* const self, const int value) {
this->maxProgress(value);
});
Le code ci-dessus compile sans problème.
Cependant, il est absolument nécessaire que le Qt::QueuedConnection
car l'objet handle
finira par passer à un autre thread.
j'ai ajouté à mon code:
QObject::connect(handle, &BatchHandle::finished, [this](const ProcessHandle* const self) {
this->processIsRunning(false);
}, (Qt::ConnectionType)Qt::QueuedConnection);
Remarquez que j'ai ajouté transtypage explicite pour vous assurer qu'il identifie correctement le type de valeur. Résultat:
1>src\TechAdminServices\database\techCore\processes\import\ImportManagerDialog.cpp(191): error C2664: 'QMetaObject::Connection QObject::connect<void(__cdecl taservices::ProcessHandle::*)(const taservices::ProcessHandle *),Qt::ConnectionType>(const taservices::ProcessHandle *,Func1,const QObject *,Func2,Qt::ConnectionType)' : cannot convert parameter 3 from 'taservices::`anonymous-namespace'::<lambda58>' to 'const QObject *'
1> with
1> [
1> Func1=void (__cdecl taservices::ProcessHandle::*)(const taservices::ProcessHandle *),
1> Func2=Qt::ConnectionType
1> ]
1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called
Comment obtenir une connexion en file d'attente lors de la connexion d'un lambda?
Je pensais à coup sûr que ce serait une dupe, puisque l'exigence du contexte cible le rend un peu inintéressant, mais apparemment pas. –