QT und SQLite: Erster Datensatz fehlt im QTableWidget



  • Hallo,
    ich möchte die Datensätze eines SQLite SELECTs in einem QTableWidget ausgeben lassen.

    Problem
    Im TableWidget fehlt der 1. Wert aus dem Datensatz und die letzte Zeile bleibt leer.
    SOLL
    1
    2
    3
    4

    IST
    2
    3
    4
    leer

    Der SELECT gibt die richtigen und vor allem ALLE Werte zurück, das habe ich schon geprüft.
    Das Problem liegt also hier in meinem QT-Code.

    Zum Code:
    Ich muss zunächst einmal durch die Datensätze gehen, um zu zählen, wie viele Zeilen das TableWidget generieren soll.
    Danach mache ich wieder queryZutaten.first(), um zurück zum 1.Datensatz für die Ausgabe der eigentlichen Inhalte zu kommen.

    Lasse ich das Durchzählen vorher weg und setze zaehl statisch auf die richtige Zahl (11), dann habe ich das Problem nicht und alle Werte werden richtig vollständig ausgegeben.

    //Schleife zum Zählen der Datensätze
            int zaehl=0;
            while(queryZutaten.next())
            {
                zaehl++;
            }
    
        //QTableWidget
            ui->twZutaten->setRowCount(zaehl);
    
            QStringList strl;
            strl<<tr("Menge")<<tr("Einheit")<<tr("Name")<<tr("Zusatz");
            ui->twZutaten->setHorizontalHeaderLabels(strl);
    
            QSqlRecord sqlrec=queryZutaten.record();
            ui->twZutaten->setColumnCount(sqlrec.count());
    
        //Zutaten ausgeben im QTableWidget
            if(queryZutaten.isActive())
            {
                int a=0;
                queryZutaten.first();
                while(queryZutaten.next())
                {
                    for(int i=0;i<4;i++)
                    {
                        QTableWidgetItem *itm = new QTableWidgetItem();
                        itm->setText(queryZutaten.value(i).toString());
    
                        ui->twZutaten->setItem(a,i,itm);
                    }
                    a++;
                }
            }
    


  • 1. Es gibt QSqlQueryModel. Muss man nicht unbedingt verwenden, sollte man aber auf jeden Fall kennen.
    2. Verwende am besten keine *Widgets. Nimm lieber ein QTableView. Mit den Widgets wirst du früher oder später Probleme bekommen. Dann kannst du mit dem QTableView entweder das QSqlQueryModel oder ein QStandardItemModel oder ein eigenes Model verwenden.
    3. Warum läufst du zweimal durch? Das brauchst du ganz sicher nicht. Selbst mit dem QTableWidget musst du die Anzahl der Zeilen nicht vorher setzen.


Anmelden zum Antworten