"int" Daten aus der Containerklasse QSet in ein ListWidget ausgeben
-
Hallo,
längere Zeit kam ich alleine klar, aber jetzt stehe ich irgendwie auf dem Schlauch.
Ich habe ganze Zahlen über ein lineEdit Widget in die Containerklasse Vector eingetragen, es dann der Reihe nach sortiert und um die doppelten Einträge herauszuholen in die Containerklasse QSet übertragen.
Das klappt alles.
Aber wenn ich die Daten wieder in ein Ausgabefenster bringen möchte, ernte ich nur rote Flaggen, egal wie ich es versuche.
Als Meldung kommt sehr oft:\QTProjekte\Sortierliste\mainwindow.cpp:129: Fehler:cannot convert 'QList<int>' to 'QList<int>*' in assignment
Was genau ist damit gemeint, und wie kann ich die Liste ausgeben?
Wäre für Hilfe sehr dankbarSteevie
-
@steevie said in "int" Daten aus der Containerklasse QSet in ein ListWidget ausgeben:
HAllo,
ja jetzt kann ich Daten in das ListWidget ausgeben. Das hat mir sehr geholfen.
Habe aber einen Denkfehler in meinem Programm.
Zuerst habe ich in einem Vektor die Daten aufsteigend sortiert und dann an QSet übergeben, um die doppelten Einträge herauszufiltern.Anscheind schmeisst QSet die Daten durcheinander, denn die Reihenfolge ist jetzt scheinbar willkürlich.
Aber ich denke, das bekomme ich jetzt hin.Danke nochmal.
Steevie
-
Hallo,
du hast eine Mischung aus QList<int> und einem Pointer QList<int>* (markiert durch den kleinen Stern.
und hier die verschiedenen Zuweisungen:
int i; int *ptr_i = &i; // ampersand gibt dir einen Pointer QList<int> intListe; QList<int> *ptr_intListe = &intListe; intListe = *ptr_intListe; i = *ptr_i;
-
Hi!
Nur mal so als kleine Anregung:std::vector<int> v = {5, 0, 2, 3, 7, 5, 9, 1, 0, 1, 2, 7}; std::sort(v.begin(), v.end()); v.erase( std::unique(v.begin(), v.end()), v.end() ); QStringList lst; lst.reserve(v.size()); for (auto const &i: v) lst.push_back(QString::number(i)); ui->listWidget->clear(); ui->listWidget->addItems(lst);
-
Hallo,
danke aber das hat noc h nicht geholfen.
Ich habe einen Container QSet mit dem Namen "ohneDoppelt".
Den kann ich mir über qDebug() anzeigen lassen:for (int i = 0; i < vektorGroesse; i++) { ohneDoppelt->insert(vektorListe->at(i)); qDebug() << "QSetliste Eingabe" << vektorListe->at(i); } int laengeQSet = ohneDoppelt->count(); qDebug() << "Ausgabe der Liste ohne Doppelt " << ohneDoppelt->values();
Aber wenn ich diese Liste in meine Ausgabe-QListWidget eintragen will, funktioniert das nicht.
Mein Versuch sieht momentan so aus:ui->listWidgetAusgabe->addItems(ohneDoppelt);
das ist jetzt die einfache Version.
Habe es schon mit for-Schleife versucht und auch mit QString::number und etliche andere Konstellationen.
Habe auch schon versucht eine QString-Liste dazwischen zu schalten, aber auch in die Liste konnte ich nichts eintragen. immer der selbe Fehler:cpp:129: Fehler:cannot convert 'QList<int>' to 'QList<int>*' in assignment
Gibt es noch Vorschläge?
Danke für Eure Mühe
Steevie
[edit:koahnig, code tags added]
-
Dein Post lässt einige Frage offen.
@steevie said in "int" Daten aus der Containerklasse QSet in ein ListWidget ausgeben:
ui->listWidgetAusgabe->addItems(ohneDoppelt);
Wenn listWidgetAusgabe ein QListWidget ist, dann musst du in addItems eine QStringList verwenden. QStringList ist defacto QList<QString> und nicht QList<int> und auch nicht QList<int>* . Damit passt die Fehlermeldung unten eigentlich nicht zu deinen Angaben.
@steevie said in "int" Daten aus der Containerklasse QSet in ein ListWidget ausgeben:
cpp:129: Fehler:cannot convert 'QList<int>' to 'QList<int>*' in assignment
Falls ohneDoppelt eine QList<int> ist, dann kannst du zum Beispiel so diese in eine QStringList umwandeln.
QStringList strList; for ( QList<int>::const_iterator it = ohneDoppelt.begin(); it != ohneDoppelt.end(); ++it ) { strList << QString().setNum ( *it ); } ui->listWidgetAusgabe->addItems(strList);
Note: Quellcode ist nicht getestet.
-
HAllo,
"ohneDoppelt" ist ein Container von "QSet" aus der STL der mit "int-Werten" gefüllt ist.
Diesen Container habe ich genommen um alle doppelten Einträge herauszufiltern.
Ich kann mir auch die "int"-Werte über qDebug() beim Ausführen des Programms anzeigen lassen.
Bisher ist es mir jedoch nicht gelungen die "int-Werte" aus dem Container QSet in QString umzuwandeln, damit diese Werte im QListWidget ausgegeben werden können.Steevie
-
Bisher hat es trotzdem noch nicht geklappt, aber ich versuch es morgen weiter.
In meinem Lehrbuch steht, dass die Container- Klasse"QSet" Teil der "Standard-Template-Library" (also STL) ist.
So wie "Vector" oder "Queue".
Oder ist das nicht richtig?Danke für die Hilfe
Steevie
-
HAllo,
ja jetzt kann ich Daten in das ListWidget ausgeben. Das hat mir sehr geholfen.
Habe aber einen Denkfehler in meinem Programm.
Zuerst habe ich in einem Vektor die Daten aufsteigend sortiert und dann an QSet übergeben, um die doppelten Einträge herauszufiltern.Anscheind schmeisst QSet die Daten durcheinander, denn die Reihenfolge ist jetzt scheinbar willkürlich.
Aber ich denke, das bekomme ich jetzt hin.Danke nochmal.
Steevie
-
@steevie said in "int" Daten aus der Containerklasse QSet in ein ListWidget ausgeben:
HAllo,
ja jetzt kann ich Daten in das ListWidget ausgeben. Das hat mir sehr geholfen.
Habe aber einen Denkfehler in meinem Programm.
Zuerst habe ich in einem Vektor die Daten aufsteigend sortiert und dann an QSet übergeben, um die doppelten Einträge herauszufiltern.Anscheind schmeisst QSet die Daten durcheinander, denn die Reihenfolge ist jetzt scheinbar willkürlich.
Aber ich denke, das bekomme ich jetzt hin.Danke nochmal.
Steevie
-
Du brauchst den Vector zum Sortieren gar nicht.
QStringList::sort erlaubt dir das Sortieren. QStringList::removeDuplicates erlaubt dir die doppelten Werte zu entfernen. Ich denke damit kannst du dir einige Verrenkungen sparen.QSet legt tatsächlich nicht auf die Reihenfolge Wert.
QSet<T> is one of Qt's generic container classes. It stores values in an unspecified order and provides very fast lookup of the values. Internally, QSet<T> is implemented as a QHash.Ich verwende QSet nicht und war einfach von der stl Funktionalität ausgegangen.
-
Danke für die Tips,
aber bei uns haben wir gerade die Containerklassen behandelt, dehalb wollte ich es damit auch programmieren.
Jetzt jhabe ich es geschafft und das Programm ist fertig.
Wenn ich so etwas noch mal mache, werde ich es wahrscheinlich über QStrinList:: machen :-)
Danke nochmal.Steevie
-
@steevie said in "int" Daten aus der Containerklasse QSet in ein ListWidget ausgeben:
Danke für die Tips,
aber bei uns haben wir gerade die Containerklassen behandelt, dehalb wollte ich es damit auch programmieren.
Jetzt habe ich es geschafft und das Programm ist fertig.
Wenn ich so etwas noch mal mache, werde ich es wahrscheinlich über QStrinList:: machen :-)
Danke nochmal.Steevie
-
@steevie said in "int" Daten aus der Containerklasse QSet in ein ListWidget ausgeben:
@steevie said in "int" Daten aus der Containerklasse QSet in ein ListWidget ausgeben:
Danke für die Tips,
aber bei uns haben wir gerade die Containerklassen behandelt, dehalb wollte ich es damit auch programmieren.
Jetzt habe ich es geschafft und das Programm ist fertig.
Wenn ich so etwas noch mal mache, werde ich es wahrscheinlich über QStringList:: machen :-)
Danke nochmal.Steevie