1

我对 QMap 有疑问。每个键都有许多值。这个想法是用它的唯一键显示所有值。要使用 QtGui 应用程序遍历此地图,我有 TextEdit(名称: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 - Adob​​e Illustrator CS6 - Adob​​e 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

4

2 回答 2

7

我会用以下方式重写它:

[..]
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());
}
[..]
于 2013-09-05T20:35:20.197 回答
2

我对 Qmap 有疑问,每个键都有很多值。

你错了。您正在使用 QMap。所以每个键都有一个值。您的一个值是 QStringList。With String qs=it.value().join(" - ");您将这个 QStringList 中的所有字符串连接到一个 QString 中。

好的,我纠正了。QMap 在同一个键下可以有多个值。我完全忽略了“insertMulti”。尽管如此,到目前为止,上述陈述仍然正确,因为他的代码中的“附加”方法属于 QMap 中的 QStringList 值。它们不会向键添加附加值,而是向 QStringList 添加新的 QString。

于 2013-09-05T20:34:52.850 回答