向QFuture关联异步函数传递QString参数仅收到首字符问题求解
问题原因
你误用了QtConcurrent::mapped接口,该接口的作用是遍历可迭代容器的所有元素,对每个元素单独执行传入的映射函数。你传入的log.fileName是QString类型,而QString本身是可迭代的字符序列,因此mapped会把路径字符串的每个字符作为独立参数传给processDataFile,你看到的输出首字符C就是遍历到的第一个元素。
修复方案
场景1:仅需要异步处理单个文件
直接用QtConcurrent::run替代mapped即可,修改调用代码:
// 替换原mapped调用行 watcher->setFuture(QtConcurrent::run(&SmartDCPD::processDataFile, this, log.fileName));
场景2:需要批量处理多个文件
先将所有待处理的文件路径存入容器(比如QList<QString>),再把容器传给mapped:
QList<QString> processFileList; processFileList << log.fileName; // 可追加多个文件路径 watcher->setFuture(QtConcurrent::mapped(processFileList, std::bind(&SmartDCPD::processDataFile, this, std::placeholders::_1)));
内容的提问来源于stack exchange,提问作者hkottmann
相关产品推荐
相关产品推荐

