这个错误表明你在尝试将 doc.save(out, 4)
的返回值(void
)当作 bool
类型使用,但 QDomDocument::save()
实际上没有返回值(返回 void
)。
错误原因
- Qt 版本差异:
在较新的 Qt 版本中(如 Qt6),QDomDocument::save()
被重载为返回bool
,表示保存是否成功。
但在某些旧版 Qt(如 Qt5)中,save()
是void
函数,无法直接用于条件判断。
解决方案
1. (推荐)升级到新版 Qt
如果你的项目允许升级到 Qt6,可以直接使用带返回值的 save()
:
if (!doc.save(out, 4)) { // Qt6+:返回 bool
qDebug() << "XML保存失败";
file.close();
return;
}
2. (兼容旧版)手动检查文件状态
如果必须使用旧版 Qt(如 Qt5),可以通过检查文件状态间接判断是否保存成功:
doc.save(out, 4); // Qt5:无返回值
// 检查文件是否写入成功
if (file.error() != QFile::NoError) {
qDebug() << "XML保存失败:" << file.errorString();
file.close();
return;
}
3. (通用写法)忽略返回值
如果不需要严格处理保存失败的情况,直接调用即可:
doc.save(out, 4); // 不检查返回值
file.close();
完整修正代码(Qt5兼容版)
QDomDocument doc;
QFile file(filePath);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) {
qDebug() << "无法创建文件:" << file.errorString();
return;
}
QTextStream out(&file);
out.setCodec("UTF-8"); // Qt5用 setCodec
doc.save(out, 4); // Qt5: void
// 通过文件错误状态判断是否成功
if (file.error() != QFile::NoError) {
qDebug() << "XML保存失败:" << file.errorString();
}
file.close();
关键点总结
Qt版本 | save() 返回值 |
推荐处理方式 |
---|---|---|
Qt5 | void |
检查 QFile::error() |
Qt6 | bool |
直接判断返回值 (if(!save()) ) |
根据你的实际环境选择对应方案即可解决该错误!
内容由零声教学AI助手提供,问题来源于学员提问