"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 dankbar

    Steevie


  • Moderators

    @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]


  • Moderators

    @steevie

    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


  • Moderators

    @steevie

    Versuche einfach QList in dem Beispiel durch QSet zu ersetzen. Sollte eigentlich auch funktionieren.

    QSet ist aber nicht STL! Hast du eine Konvertierung gemacht?



  • 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


  • Moderators

    @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



  • @steevie Warum zitierst du dich ständig selbst? ^_^


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.