Seite 1 von 2

[gelöst] Element aus QStringList entfernen - Wie?

Verfasst: 15. Juni 2005 13:43
von Saiyaman

Code: Alles auswählen

itsLocalPathList.erase(itsLocalPathList.begin() + i);
Warum geht der Code nich? i ist unsigned int und itsLocalPathList ist QStringList.

MfG

Re: Element aus QStringList entfernen - Wie?

Verfasst: 15. Juni 2005 14:22
von macman
itsLocalPathList.begin() liefert einen Zeiger und mit dem +i setzt Du den Zeiger höchstwahrscheinlich ins Nirwana.

Wenn Dir der String bekannt ist, nimm remove(QString(myString)). Ansonsten mit dem Iterator durch steppen, bis Du beim Richtigen bist.

Code: Alles auswählen

	QStringList::Iterator it = myStringList.begin();
	while (it != myStringList.end()) 
	{
		if (remove)
			it = myStringList.remove(it);
		else
			++it;
	}
Statt remove() kannst Du auch erase() nehmen.[/code]

Verfasst: 15. Juni 2005 14:51
von Saiyaman
Wieso sollte der einen Zeiger liefern? Der liefert einen Iterator und i zählt weiter. Mit normalen Vectorlisten klappt das prima.

MfG

Verfasst: 15. Juni 2005 15:03
von macman
Dann solltest Du vielleicht mal erklären was nicht funktioniert. Welche Fehlermeldung kommt? Bist Du sicher das i noch innerhalb der Stringlist ist?

Verfasst: 15. Juni 2005 15:42
von Saiyaman


Kompilieren...
***.cpp
***.cpp(124) : error C2678: Binärer Operator '+': Es konnte kein Operator gefunden werden, der einen linksseitigen Operator vom Typ 'QValueList::iterator' akzeptiert (oder keine geeignete Konvertierung möglich)
with
[
T=QString
]
MfG

Verfasst: 15. Juni 2005 15:55
von macman
Saiyaman hat geschrieben:


Kompilieren...
***.cpp
***.cpp(124) : error C2678: Binärer Operator '+': Es konnte kein Operator gefunden werden, der einen linksseitigen Operator vom Typ 'QValueList::iterator' akzeptiert (oder keine geeignete Konvertierung möglich)
with
[
T=QString
]
MfG
Dann steht doch die Erklärung da.

Im übrigen bleibe ich dabei das ein Iterator ein Zeiger ist, oder wie erklärst Du sonst das hier:

Code: Alles auswählen

QStringList::Iterator it = myStringList.begin();
   while (it != myStringList.end())
   {
      QString text = *it;
      ++it;
   } 

Verfasst: 16. Juni 2005 09:32
von Saiyaman
Mir ist die Position bekannt, nicht der String.

MfG :-/

Verfasst: 16. Juni 2005 09:36
von Saiyaman

Code: Alles auswählen

			QStringList::iterator it = itsLocalPathList.begin();
			it += i;
			itsLocalPathList.remove(it);
Ich pack das nich. Warum geht das nun so und nich so?

Code: Alles auswählen

itsLocalPathList.remove(itsLocalPathList.begin() + i);
MfG

Verfasst: 16. Juni 2005 09:52
von macman
Saiyaman hat geschrieben:Mir ist die Position bekannt, nicht der String.
Ist dir auch die Doku bekannt? Öffne mal den Assistenten, gib beim Index 'QStringList' ein, dann auf 'List of all member function' und was sehen wir als 3. Eintrag?

myStringList.at(int) ist genau das was Du haben willst. Ich habe es noch nicht gebraucht, aber es hat mich nicht mal ne Minute gekostet es zu finden. Die Qt Doku ist sehr gut und die Jungs von Trolltech können denken. Hätte mich sehr gewundert, wenn es etwas in der Art nicht gegeben hätte.

Seh es nicht als Kritik, wahrscheinlich waren nur zuviele Bäume da :-)

Verfasst: 16. Juni 2005 20:21
von Saiyaman
Ich kenne die Doku und habe diese Sektion über QStringList gut studiert. Aber eine "einfache" Möglichkeit scheint es eben einfach nicht zu geben ;)

Najo, Problem gelöst :)

MfG

Verfasst: 16. Juni 2005 22:34
von FlorianBecker
list.remove( list.at( deineId ) );

DAS WOLLTE ER DAMIT SAGEN!!!

Und du bist WIRKLICH so ein Kandidat, der anscheinend nicht lesen kann. Das sieht man an all deinen Posts.

Verfasst: 17. Juni 2005 11:12
von lepsai
cool bleiben :)

Verfasst: 17. Juni 2005 11:13
von FlorianBecker
Hehe. Natürlich.

Verfasst: 17. Juni 2005 11:34
von Saiyaman
@FlorianBecker

Du hast ne PN ...

Edit: Im Übrigen möchte ich nicht einfach nur Lösungen abtippen, sondern auch verstehen, warum etwas so ist :P

Verfasst: 17. Juni 2005 11:42
von FlorianBecker
Ja, wie wäre denn eine Frage ala:

Hallo,

ich möchte verstehen, wie die QValueList Klasse arbeitet, bisher bin ich desöftern bei solchen Dingen wie remove gescheitert. Ich habe hier ein wenig Code:

CODE

Aber es funktioniert nicht, selbst mit qDebug kommt nicht der richtig Wert heraus. Hier ist die Ausgabe von qDebug incl. dem Code:

ZEUG

usw.

Dann würde es solche Diskussionen hier gar nicht erst geben.