如何遍历QMap<int,QStringList>
时间: 2023-07-19 09:06:51 浏览: 103
遍历 QMap<int, QStringList> 可以使用迭代器,示例如下:
```c++
QMap<int, QStringList> myMap;
// 添加数据
myMap.insert(1, {"A", "B", "C"});
myMap.insert(2, {"D", "E", "F"});
// 遍历数据
QMapIterator<int, QStringList> i(myMap);
while (i.hasNext()) {
i.next();
int key = i.key();
QStringList values = i.value();
// 处理 key 和 values
qDebug() << "key:" << key << ", values:" << values;
}
```
QMapIterator 是 QMap 的迭代器,可以使用 hasNext() 和 next() 方法遍历 QMap。其中,key() 方法返回当前迭代器指向的键,value() 方法返回当前迭代器指向的值。在上面的示例中,我们将 QMap<int, QStringList> 的键和值分别赋值给了 key 和 values。
相关问题
void MainWindow::addPortToCombo() { /*get com port*/ QList<USBPortInfoStruct> list_port=portManager->deleteOfflineUsbVirtualPort(); ui->comboBox->clear(); portNumber = 0; QString diagPort; QString nmeaPort; if(list_port.size()>0){ int i = 0; for(i=0; i<list_port.size(); i++) { if(list_port[i].friendly_name.indexOf("AT") != -1) { this->portString = getPort(list_port[i].friendly_name).toLatin1().data(); portNumber++; ui->comboBox->addItem("AT Port "+portString); return; } if(list_port[i].friendly_name.indexOf("Diagnostics") != -1) { ui->comboBox->addItem(list_port[i].friendly_name); diagPort = getPort(list_port[i].friendly_name).toLatin1().data(); } else if(list_port[i].friendly_name.indexOf("NMEA") != -1) { ui->comboBox->addItem(list_port[i].friendly_name); nmeaPort = getPort(list_port[i].friendly_name).toLatin1().data(); } } } /*get Regedit port*/ QMap<QString,QString>keyComMap = portManager->getKeyComMap(); ui->comboBox->clear(); portNumber = 0; QMap<QString,QString>::iterator it; //遍历map for ( it = keyComMap.begin(); it != keyComMap.end(); ++it ) { if (it.key().indexOf("QCUSB")!=-1 && it.value()!=diagPort && it.value()!=nmeaPort) { portNumber++; portString = it.value(); ui->comboBox->addItem("Modem "+portString); break; } } }啥意思
这段代码是一个 Qt 程序中的一个函数,用于向下拉框控件中添加串口列表。首先通过 portManager 对象获取已连接的 USB 串口信息,然后根据串口的 friendly_name 属性判断出 AT、Diagnostics 和 NMEA 三种串口类型,并分别添加到下拉框中。如果没有 AT 类型的串口,则从 Diagnostics 和 NMEA 串口中任选一个添加到下拉框中。接着通过 portManager 对象获取注册表中的串口信息,并从中筛选出 QCUSB 类型的串口,并添加到下拉框中。最后通过 ui->comboBox->addItem() 函数向下拉框中添加串口信息。其中,portString、portNumber、diagPort 和 nmeaPort 是该函数中定义的变量。
QMap<int, QString> mapValue; //拼接map QStringList unitList = { "m", "m/s", "°", "Km/h","rpm","bar","mbar","°C","","Kg","V","A","正常","Pa" }; for (QString unit : unitList) { mapValue.insert(0, QString::number(str_fly.flyheight) + unit); mapValue.insert(1, QString::number(str_fly.flyheight) + unit); mapValue.insert(2, QString::number(str_fly.flyheight) + unit); if (unit == "Km/h") { mapValue.insert(3, QString::number(str_fly.airspeed * 3.6) + unit); } else if (unit == "m/s") { mapValue.insert(4, QString::number(str_fly.liftspeed) + unit); mapValue.insert(5, QString::number(str_fly.earthspeed) + unit); mapValue.insert(51, QString::number(str_fly.groundspeed) + unit); mapValue.insert(55, QString::number(str_fly.sidoffsetspeed) + unit); // 4:侧偏移速度 mapValue.insert(57, QString::number(str_fly.sidoffsetspeed) + unit); mapValue.insert(97, QString::number(str_fly.groundspeed) + unit); } }有问题请修改
修改后的代码如下:
```
QMap<int, QString> mapValue;
QStringList unitList = { "m", "m/s", "°", "Km/h","rpm","bar","mbar","°C","","Kg","V","A","正常","Pa" };
for (QString unit : unitList) {
if (unit == "Km/h") {
mapValue.insertMulti(3, QString::number(str_fly.airspeed * 3.6) + unit);
} else if (unit == "m/s") {
mapValue.insertMulti(4, QString::number(str_fly.liftspeed) + unit);
mapValue.insertMulti(5, QString::number(str_fly.earthspeed) + unit);
mapValue.insertMulti(51, QString::number(str_fly.groundspeed) + unit); // 4:侧偏移速度
mapValue.insertMulti(55, QString::number(str_fly.sidoffsetspeed) + unit);
mapValue.insertMulti(57, QString::number(str_fly.sidoffsetspeed) + unit);
mapValue.insertMulti(97, QString::number(str_fly.groundspeed) + unit);
} else {
mapValue.insertMulti(0, QString::number(str_fly.flyheight) + unit);
mapValue.insertMulti(1, QString::number(str_fly.flyheight) + unit);
mapValue.insertMulti(2, QString::number(str_fly.flyheight) + unit);
}
}
```
主要的修改包括:
1. 使用 `QMap::insertMulti()` 函数来避免键值重复。
2. 添加一个默认分支,以确保所有可能的单位都被处理。
3. 将 `mapValue` 定义在循环外部,以便在其他地方使用。