C++,读取配置文件中的距离和焦距写入QMap中,使用for循环遍历,判断如果距离大于当前距离,小于下一个距离区间的最小值,则返回当前区间的焦距,如果小于当前距离,大于上一个区间的最大值,也返回当前区间的焦距,返回值类型是QStringList,距离和焦距之间采用逗号隔开
时间: 2023-12-24 15:03:12 浏览: 99
好的,我理解了您的问题,这里是一个示例代码,可能需要您根据实际情况进行适当调整:
```cpp
#include <QFile>
#include <QTextStream>
#include <QMap>
#include <QStringList>
QStringList getFocalLength(QString filePath, double distance) {
QMap<double, double> focalLengthMap; // 存储距离与焦距的映射关系
QFile configFile(filePath);
QStringList result; // 存储结果字符串列表
if (configFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
QTextStream in(&configFile);
while (!in.atEnd()) {
QString line = in.readLine().trimmed();
if (line.isEmpty() || line.startsWith("#")) {
continue; // 跳过注释和空行
}
QStringList parts = line.split(",");
if (parts.size() != 2) {
continue; // 数据格式错误,跳过此行
}
bool ok;
double d = parts[0].toDouble(&ok);
if (!ok) {
continue; // 距离数据转换错误,跳过此行
}
double f = parts[1].toDouble(&ok);
if (!ok) {
continue; // 焦距数据转换错误,跳过此行
}
focalLengthMap.insert(d, f); // 插入映射关系
}
configFile.close();
}
QMap<double, double>::const_iterator i = focalLengthMap.constBegin();
double lastDistance = -1;
double lastFocalLength = -1;
while (i != focalLengthMap.constEnd()) {
double currentDistance = i.key();
double currentFocalLength = i.value();
if (distance > currentDistance) {
lastDistance = currentDistance;
lastFocalLength = currentFocalLength;
} else if (distance <= currentDistance && lastDistance >= 0 && distance >= lastDistance) {
result.append(QString("%1,%2").arg(lastFocalLength).arg(lastDistance));
break;
}
++i;
}
return result;
}
```
其中,`filePath` 是配置文件的路径,`distance` 是要查询的距离,函数返回一个字符串列表,包含对应的焦距和距离。如果没有找到对应区间,返回空列表。
您可以按照以下方式调用此函数:
```cpp
QStringList result = getFocalLength("/path/to/config/file.txt", 5.0);
qDebug() << result; // 输出结果
```
注意修改文件路径和实际查询的距离。希望能对您有所帮助。
阅读全文