Seite 1 von 1

QVariant Liste nach QString Liste

Verfasst: 19. März 2009 23:50
von anno1988

Code: Alles auswählen


QSqlQuery query("SELECT irgendwas FROM irgendwo");
QList<QVariant> val;

val = query.boundValues().values();

Wie bekomme ich denn auf dem einfachsten Werg aus der QVariant Liste eine QString List?

Verfasst: 20. März 2009 07:25
von chrootdev
Das sollte laut doku so funktionieren:

Code: Alles auswählen

//Für das erste element der QList

QStringList str_list = val.at(0).toList();

Verfasst: 20. März 2009 09:00
von anno1988
ok achte das geht auch einfacher, ab dann muss ich wohl jedes Element der Liste einmal duchlaufen um es umzuwandeln.

Verfasst: 20. März 2009 10:39
von macman

Code: Alles auswählen

QStringList sl;
foreach(QVariant var, vl)
    sl.append(var.toString());
Ist wirklich kein Umstand und ich wüßte nicht wie es einfacher ginge. Qt würde es auch nicht anders machen.

Verfasst: 20. März 2009 10:48
von Christian81
[Klugscheisser Mode an]

Code: Alles auswählen

QStringList sl;
foreach(const QVariant &var, vl)
    sl.append(var.toString());
ist viel besser.
Noch besser wäre

Code: Alles auswählen

QStringList sl;
QList<QVariant>::ConstIterator it = v.constBegin();
QList<QVariant>::ConstIterator end = v.constEnd();
for( ; it != end ; ++it )
    sl.append(it.toString());
8)

Verfasst: 20. März 2009 11:24
von pfid
Christian81 hat geschrieben:[Klugscheisser Mode an]
Hast du jetzt vergessen den wieder auszumachen? :/

Verfasst: 20. März 2009 11:32
von Christian81
[/Klugscheisser Mode an]
:lol:

Gut dass das der Moderator nicht sieht :)

Verfasst: 20. März 2009 12:41
von RHBaum
da wir grad dabei sind ^^

warum schreibst du so komische iteratorschleifen ???
der v.end() sollt dich eigentlich nix kosten .. ist ja nur ne referenz auf nen vorhanden iterator !

Code: Alles auswählen

for(QList<QVariant>::const_iterator it = v.begin(); it != v.end(); ++it ) sl.append((*it).toString()); 
wenn scho klu ... dingens, dann richtig:

Code: Alles auswählen

QVariant var;
foreach(var,v) sl.append(var.toString); 
Wobei obere Version vielleicht schneller sein sollt, da foreach gleich ne kopie vom Wert macht, weiss ned ob der compiler das wegbekommt.
Aber das unten sieht schoener aus ! :lol: :lol: :lol:

Ciao ...

Verfasst: 20. März 2009 13:50
von Christian81
Zu end():
http://techbase.kde.org/Development/Tut ... _end.28.29

Und Q_FORECH ist wirklich langsamer (hat auch thiago maceira von trolltech zugegeben ;) )

Verfasst: 20. März 2009 14:08
von macman
Christian81 hat geschrieben:Und Q_FORECH ist wirklich langsamer (hat auch thiago maceira von trolltech zugegeben ;) )
Ehrlich gesagt habe ich mich auch gewundert, warum sie das eingebaut haben. Die meisten Programmierer sind schon faul genug, da muss das nicht noch mit so was unterstützen :)

Verfasst: 20. März 2009 14:28
von RHBaum
Ok, dann machen die schleifen so schon Sinn ....

Wobei ich es schon eklig find, das die Qt da scheinbar so unperformant ist ...

bei der STL machts bei nem halbwegs moderenen Compiler keinen Unterschid, ob man das end() cacht oder ned, der end() aufruf sollte wegoptimiert werden ...
Ehrlich gesagt habe ich mich auch gewundert, warum sie das eingebaut haben.
Wahrscheinlich, weil die STL unter <algorithm> auch sowas ähnliches anbietet. Die ganzen Container haben ja auch ein STL-Like interface. Wobei es bei der stl mehr sinn macht ... durch die generische (sprich templetisierte) Implementation kann die stl impl fuer den Container immer ne optimierte version fuer den container überladen ....

Ciao ...