You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt 6 QPromise调用finish()触发编译错误,请求技术帮助

QPromise::finish()编译错误的原因与解决办法

错误原因

  • Lambda表达式默认是const属性的函数,捕获的变量p会被视为const QPromise<QByteArray>类型
  • QPromise::finish()是非const成员函数,无法通过const对象调用,因此触发C2662类型转换错误

解决办法

给lambda添加mutable修饰符,解除其const限制,让捕获的p可以被修改:

QPromise<QByteArray> promise;
QFuture<QByteArray> future = promise.future();

promise.start();
qDebug() << "Pre timer";
QTimer::singleShot(2000, this, [p = std::move(promise)]() mutable
{
    qDebug() << "Timer triggered";
    p.finish(); // 现在可正常编译调用
});

补充说明

Qt官方博客的示例大概率是省略了mutable这个细节,并非核心逻辑错误——因为lambda要修改捕获的移动构造对象,必须显式声明mutable才能突破默认的const限制。

内容的提问来源于stack exchange,提问作者Hyndrix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 19:05:55