[gelöst] QString Array

Alles rund um die Programmierung mit Qt
Antworten
Notwist
Beiträge: 85
Registriert: 2. März 2005 14:24

[gelöst] QString Array

Beitrag 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?
Gruß, Notwist
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Gibt es einen Grund warum Du keine QStringList nimmst? Ist ja auch nichts anderes als ein eindimensionales Stringarray.
Notwist
Beiträge: 85
Registriert: 2. März 2005 14:24

Beitrag 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.
Gruß, Notwist
Notwist
Beiträge: 85
Registriert: 2. März 2005 14:24

Beitrag 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?
Gruß, Notwist
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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.
Notwist
Beiträge: 85
Registriert: 2. März 2005 14:24

Beitrag 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?
Gruß, Notwist
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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].
Notwist
Beiträge: 85
Registriert: 2. März 2005 14:24

Beitrag 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
Gruß, Notwist
Antworten