Seite 1 von 1

[gelöst] QString Array

Verfasst: 17. Juni 2005 12:17
von Notwist
Hallo,

ich habe mal eine totale Newbie-Frage, aber ich checks gerade mal wieder nicht. Möchte ein Array von QStrings anlegen und diese dann ganz normal auslesen. Der Code, der ohne Arrays funktioniert, lautet so:

Code: Alles auswählen

			if (a=="m")
			{
				node=node.namedItem("source");
				ele = node.toElement();
				QString text=ele.text();
				node=node.nextSibling();
				ele = node.toElement();
				QString text2=ele.text();
				node=node.nextSibling();
				ele = node.toElement();
				QString text3=ele.text();
				node=node.nextSibling();
				ele = node.toElement();
				QString text4=ele.text();
				node=node.nextSibling();
				ele = node.toElement();
				QString text5=ele.text();
				node=node.nextSibling();
				ele = node.toElement();
				QString text6=ele.text();
				node=node.nextSibling();
				ele = node.toElement();
				QString text7=ele.text();				
				node=node.parentNode();
		
                            modbusDataList.append(new ModbusData(
					text,
					text2.toUInt(&ok, 0),
					text3, 
					text4.toUInt(&ok, 0),
					text5.toUShort(&ok, 0),
					text6, 
					text7.toUShort(&ok, 0)));
			}
Das würde ich gerne in eine For-Schleife mit QString-Arrays verpacken, also irgendwie so:

Code: Alles auswählen

			if (a=="m")
			{
				node=node.namedItem("source");
				ele = node.toElement();
				QString text[0]=ele.text();
 
				for (int i=1; i<=6; i++)
				{
					node=node.nextSibling();
					ele = node.toElement();
					text[i]=ele.text();
				}
				node=node.parentNode();
  		modbusDataList.append(new ModbusData(
					text[0],
					text[1].toUInt(&ok, 0),
					text[2], 
					text[3].toUInt(&ok, 0),
					text[4].toUShort(&ok, 0),
					text[5], 
					text[6].toUShort(&ok, 0)));
			}
Da meckert er aber erstmal, dass man QString text[0]=ele.text(); nicht so nehmen darf (error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'class QString' (or there is no acceptable conversion)) und text[1].toUInt(&ok, 0) ebenso nicht (error C2039: 'toUInt' : is not a member of 'QCharRef'). Wenn ich jetzt schreibe

Code: Alles auswählen

text[0]=*ele.text();
ist der eine fehler zwar weg, aber dann zeigt er ja nur auf das erste Zeichen und nimmt nicht den ganzen QString.

Könnt ihr mir erzählen, was man bei nem Array von QStrings beachten muss?

Verfasst: 17. Juni 2005 13:03
von macman
Gibt es einen Grund warum Du keine QStringList nimmst? Ist ja auch nichts anderes als ein eindimensionales Stringarray.

Verfasst: 20. Juni 2005 11:22
von Notwist
macman hat geschrieben:Gibt es einen Grund warum Du keine QStringList nimmst? Ist ja auch nichts anderes als ein eindimensionales Stringarray.
Dachte mir, eine QStringList wäre für dieses Problem einfach zuviel. Aber letztendlich hast Du wahrscheinlich recht. Würd mich trotzdem interessieren, wie man das mit einem Array richtig macht.

Verfasst: 20. Juni 2005 12:03
von Notwist
Und das Problem ist ja noch, einen einzelnen String aus der QStringList zu isolieren und den dann mit meinem append-Befehl zuzuweisen, oder? Ich kann zwar über die Liste iterieren, aber ich kann halt nicht in einem Befehl auf alle Strings gleichzeitig zugreifen, oder?

Verfasst: 20. Juni 2005 12:51
von macman
Notwist hat geschrieben:Und das Problem ist ja noch, einen einzelnen String aus der QStringList zu isolieren und den dann mit meinem append-Befehl zuzuweisen, oder?
Ich versteh nicht ganz was Du vor hast. append fügt ans Ende an, prepend an den Anfang und insert ist zum einfügen in eine Liste.
Notwist hat geschrieben:Ich kann zwar über die Liste iterieren, aber ich kann halt nicht in einem Befehl auf alle Strings gleichzeitig zugreifen, oder?
Wozu willst Du auf alle Strings gleichzeitig zugreifen? Um eine bestimmte Stelle zu finden? Dafür bietet dir die StringList doch alle Möglichkeiten.

Verfasst: 20. Juni 2005 13:01
von Notwist
Wie Du im Quellcode oben sehen kannst

Code: Alles auswählen

                           modbusDataList.append(new ModbusData( 
               text, 
               text2.toUInt(&ok, 0), 
               text3, 
               text4.toUInt(&ok, 0), 
               text5.toUShort(&ok, 0), 
               text6, 
               text7.toUShort(&ok, 0)));
möchte ich mit diesem Befehl meine QPtrList füllen und dafür brauche ich halt diese 7 QStrings. Das lässt sich über die QStringList ja nicht verwirklichen, da ich die Einträge doch nicht array-mäßig mit einem Index ansprechen kann, oder?

Verfasst: 20. Juni 2005 13:24
von macman
Notwist hat geschrieben:möchte ich mit diesem Befehl meine QPtrList füllen und dafür brauche ich halt diese 7 QStrings. Das lässt sich über die QStringList ja nicht verwirklichen, da ich die Einträge doch nicht array-mäßig mit einem Index ansprechen kann, oder?
Doch, natürlich. Einfach mit StringList[pos].

Verfasst: 20. Juni 2005 13:32
von Notwist
macman hat geschrieben:
Notwist hat geschrieben:möchte ich mit diesem Befehl meine QPtrList füllen und dafür brauche ich halt diese 7 QStrings. Das lässt sich über die QStringList ja nicht verwirklichen, da ich die Einträge doch nicht array-mäßig mit einem Index ansprechen kann, oder?
Doch, natürlich. Einfach mit StringList[pos].
Hey, das war ja einfach, warum habe ich das nirgends gefunden in der Doku? Geht wahrscheinlich mit allen Listen, oder? Super, das habe ich gebraucht. :D