Как показать все ключи внутри QMap с QStringList?

У меня проблема с QMap. Каждый ключ имеет много значений. Идея состоит в том, чтобы показать все значения с его уникальным ключом. Чтобы перебрать эту карту с помощью приложения QtGui, у меня есть TextEdit (name: t2). Код внутри кнопки выглядит так:

void MainWindow::on_push2_clicked()
{
QMap<int, QStringList> myMaps;
myMaps[1].append("Autodesk Maya 2014");
myMaps[1].append("Autodesk Inventor 2014");
myMaps[1].append("Autodesk Alias 2014");
myMaps[1].append("Autodesk 3ds Max 2014");
myMaps[1].append("Autodesk Softimage 2014");
myMaps[2].append("Adobe Photoshop CS6");
myMaps[2].append("Adobe Illustrator CS6");
myMaps[2].append("Adobe InDesign CS6");
myMaps[1].append("Autodesk AutoCAD 2014");

QStringList stsl; // the StringList which contains all values

QMap<int, QStringList>::iterator it;

for (it=myMaps.begin(); it!=myMaps.end(); ++it) {
QString qsi=QString::number(it.key());
QString qs=it.value().join(" - ");
stsl << "<span style='color:#FF1000;font-weight:bold;'>"+qsi + " : </span>"+ qs;
}

QString st4=stsl.join("<br/>"); //With setHtml
ui->t2->setHtml(st4);
}
}

// Выход :
1: Autodesk Maya 2014 — Autodesk Inventor 2014 — Autodesk Alias ​​2014 — Autodesk 3ds Max 2014 — Autodesk Softimage 2014 — Autodesk AutoCAD 2014 — Lightwave 12
2: Adobe Photoshop CS6 — Adobe Illustrator CS6 — Adobe InDesign CS6.

// Вывод, который я хочу сделать:
1: Autodesk Maya 2014
1: Autodesk Inventor 2014
1: Autodesk Alias ​​2014
1: Autodesk 3ds Max 2014
1: Autodesk Softimage 2014
1: Autodesk AutoCAD 2014
2: Adobe Photoshop CS6
2: Adobe Illustrator CS6
2: Adobe InDesign CS6

0

Решение

Я бы переписал это следующим образом:

[..]
QMultiMap<int, QString> myMaps;

myMaps.insert(1, "Autodesk Maya 2014");
myMaps.insert(1, "Autodesk Inventor 2014");
myMaps.insert(1, "Autodesk Alias 2014");
myMaps.insert(1, "Autodesk 3ds Max 2014");
myMaps.insert(1, "Autodesk Softimage 2014");
myMaps.insert(2, "Adobe Photoshop CS6");
myMaps.insert(2, "Adobe Illustrator CS6");
myMaps.insert(2, "Adobe InDesign CS6");
myMaps.insert(1, "Autodesk AutoCAD 2014");

QMap<int, QString>::iterator it;
QString output;

for (it = myMaps.begin(); it != myMaps.end(); ++it) {
// Format output here.
output += QString("%1 : %2").arg(it.key()).arg(it.value());
}
[..]
4

Другие решения

У меня проблема с Qmap, у каждого ключа много значений.

Вы неправы. Вы используете QMap. Таким образом, каждый ключ имеет ровно одно значение. Ваше единственное значение — QStringList. With String qs=it.value().join(" - "); вы объединяете все строки в этом QStringList в один QString.

Хорошо, я исправлен. QMap может иметь более одного значения под одним и тем же ключом. Я полностью пропустил «insertMulti». Тем не менее, вышеприведенное утверждение до сих пор остается верным, поскольку методы ‘append’ в его коде принадлежат значениям QStringList в QMap. Они не добавляют дополнительное значение к ключу, но добавляют новую QString в QStringList.

2

По вопросам рекламы [email protected]