c – 连接lambda时如何将Qt :: ConnectionType传递给QObject :: connect?

我将lambdas连接到QObject的信号:
QObject::connect(handle,&BatchHandle::progressMax,[this](const ProcessHandle* const self,const int value) {
        this->maxProgress(value);
    });

上面的代码编译没有问题.

但是Qt :: QueuedConnection是绝对必要的,因为句柄对象最终将移动到另一个线程.

我把它添加到我的代码中:

QObject::connect(handle,&BatchHandle::finished,[this](const ProcessHandle* const self) {
        this->processIsRunning(false);
    },(Qt::ConnectionType)Qt::QueuedConnection);

请注意我是如何添加显式强制转换以确保它正确标识值类型的.结果:

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

连接lambda时如何获得排队连接?

解决方法

我认为你需要使用 QObject::connect overload,它允许你指定应该调用lambda的上下文…
QObject::connect(
  handle,target_context,/* Target context parameter. */
  [this](const ProcessHandle* const self,const int value)
  {
    this->maxProgress(value);
  },Qt::QueuedConnection);

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...