String Indizierter QVector, QList o.ä.
-
zwutz schrieb:
falsch. QMap verlangt
operator<
.operator==
wird von QHash vorausgesetztStimmt, mist.
Und ich hatte die Doku offen und den Satz genau vor meiner Nase
-
Ja sorry, Hochkomma und semikolon. Bin halt noch bei PHP manchmal
Hab nicht wirklich drüber nachgedacht.
Danke ich probiere es mal mit ner qmap.
-
Ok, das eine klappt schonmal!
So hab nun dieses kleine Script geschrieben:QMap<QString, QMap<QString, QString> > test2darray; test2darray["Wert1"]["Value1"] = QString::fromStdString("test1"); test2darray["Wert1"]["Value2"] = QString::fromStdString("test2"); test2darray["Wert1"]["Value3"] = QString::fromStdString("test3"); test2darray["Wert2"]["Value1"] = QString::fromStdString("bla1"); test2darray["Wert2"]["Value2"] = QString::fromStdString("bla2"); test2darray["Wert2"]["Value3"] = QString::fromStdString("bla3");
Wenn ich nun diese Foreach-Schleife durchlaufen lasse geht es, mir werden die Werte test1-3 angezeigt:
foreach(QString str, test2darray["Wert1"]) { qDebug() << str; }
Aber wenn ich nun die Foreach-Schleife für's erste Paar ausgeben möchte klappt das leider noch nicht:
foreach(QString str, test2darray) { qDebug() << str; }
Da hätte ich jetzt gerne die Werte "Wert1" und "Wert2" ausgegeben. Dat klappt aber irgendwie nicht mit dem was ich da gemacht habe
Könnt Ihr mir da nochmal helfen?
Als nächstes wäre noch die Frage wie ich bei der oberen Schleife noch den Key von dem aktuellen Wert bekommen kann. Also irgendwie sowas:
foreach(QString str, test2darray["Wert1"]) { qDebug() << "Key: " << key << " mit dem Wert: " << str; }
und als Ausgabe hätte ich dann:
Key: Value1 mit dem Wert: test1
Key: Value2 mit dem Wert: test2
Key: Value3 mit dem Wert: test3Vielen dank euch allen!!
-
foreach ist da eher die schlechtere Wahl. Wenn du Zugriff auf die keys haben willst, musst du die iteratoren bemühen
for (QMap<QString, QMap<QString, QString> >::iterator oiter = test2darray.begin(); oiter != test2darray.end(); ++oiter) { QString key1 = oiter.key(); QMap<QString, QString> value1 = oiter.value(); for (QMap<QString, QString>::iterator iiter = value1.begin(); iiter != value1.end(); ++iiter) { QString key2 = iiter.key(); QString value2 = iiter.value(); std::cout << "test2darray[\"" << key1 << "\"][\"" << key2 << "\"] = \"" << value2 << "\"" << std::endl; } }
-
QMap<QString, QMap<QString, QString> > test2darray; test2darray["Wert1"]["Value1"] = QString::fromStdString("test1"); [...]
Ist das dein Ernst?
Du erstellst da erst einen std::string mit nem const char* als Parameter, nur um ihn dann über QString::fromStdString() in einen QString zu bekommen?
Das sollte eigentlich auch so funktionieren:test2darray["Wert2"]["Value1"] = "bla1"
Ansonsten gibt es auch für QString den Konstruktor mit const char* als Parameter, kein Grund also um den Umweg über std::string zu gehen!
-
QString den Konstruktor mit const char* als Parameter, kein Grund also um den Umweg über std::string zu gehen!
bei mir meckert er immer! Und sagt das es ebend solch einen Konstruktor nicht gibt!
-
Ok, mit iteratoren geht es wunderbar! Vielen vielen Dank
-
der_burner schrieb:
QString den Konstruktor mit const char* als Parameter, kein Grund also um den Umweg über std::string zu gehen!
bei mir meckert er immer! Und sagt das es ebend solch einen Konstruktor nicht gibt!
evtl irgendwo
QT_NO_CAST_FROM_ASCII
definiert?Dann würde ich aber
QString::fromAscii(const char*)
verwenden.
-
Jup, das wars! War in der .pro Datei definiert. Habs rausgeschmissen und schon läufts.
Vielen Dank
-
zwutz schrieb:
Dann würde ich aber
QString::fromAscii(const char*)
verwenden.Ich denke QString::fromLocal8Bit() ist besser. Das verwendet die locale. Latin-1 ist ja nicht unbedingt überall das Nonplusultra...