QTableView zeigt QSqlTableModel nicht an



  • Dieser Slot sollte eine leere Tabelle mit 3 Spalten anzeigen:

    //QT += sql
    //#include <QtSql>
    //#include <QTableView>
    void MainWindow::on_pushButton_clicked()
    {
        QSqlTableModel *MODEL = new QSqlTableModel;
        MODEL->setHeaderData(0, Qt::Horizontal, "001");
        MODEL->setHeaderData(1, Qt::Horizontal, "002");
        MODEL->setHeaderData(2, Qt::Horizontal, "003");
    
        QTableView *VIEW = new QTableView;
        VIEW->setWindowTitle("Die Tabelle");
        VIEW->setModel(MODEL); //Hier wird das QTableView mit dem QSqlTableModel verbunden
                               //weshalb die Spaltenköpfe: 001, 002, 003 eigentlich angezeigt werden müssten
        VIEW->resizeColumnsToContents();
        VIEW->resize(1000,600);
        VIEW->show();
    }
    

    Nach Klicken des Pushbuttons wird das QTableView zwar angezeigt, jedoch ist es komplett leer.
    Auch VIEW->update() hilft hier nicht.
    Weis jemand, warum die Spaltenköpfe nicht angezeigt werden?



  • @theAnfänger77 sagte in QTableView zeigt QSqlTableModel nicht an:

    QSqlTableModel

    Weil du keine Datenbank und keine Tabelle gesetzt und nichts selektiert hast?



  • Ok, das Thema scheint doch komplizierter zu sein als ich gedacht habe.
    So etwa würde ich die Schritte von manni66 umsetzen:

    //QT += sql
    //#include <QtSql>
    //#include <QTableView>
    void MainWindow::on_pushButton_clicked()
    {
        //Datenbank setzen (Ich brauche eine .db Datei)
        QSqlDatabase DATABASE;
        DATABASE = QSqlDatabase::addDatabase("QSQLITE");
        DATABASE.setDatabaseName("E:\C++\Qt\207_Tabelle\DBDATEI.db");
    
        QSqlTableModel *MODEL = new QSqlTableModel;
    
        //Tabelle setzen
        MODEL->setTable("Name");
    
        MODEL->setHeaderData(0, Qt::Horizontal, "001");
        MODEL->setHeaderData(1, Qt::Horizontal, "002");
        MODEL->setHeaderData(2, Qt::Horizontal, "003");
    
        //Selektieren
        MODEL->select();
    
        QTableView *VIEW = new QTableView;
        VIEW->setWindowTitle("Die Tabelle");
        VIEW->setModel(MODEL);
        VIEW->resizeColumnsToContents();
        VIEW->resize(1000,600);
        VIEW->show();
    }
    

    Aber das ist wohl nicht richtig, denn es geht immer noch nicht.
    Eigentlich wollte ich einfach nur mal eine Tabelle anzeigen lassen.



  • @theAnfänger77 sagte in QTableView zeigt QSqlTableModel nicht an:

    Ok, das Thema scheint doch komplizierter zu sein als ich gedacht habe.
    So etwa würde ich die Schritte von manni66 umsetzen:

    //QT += sql
    //#include <QtSql>
    //#include <QTableView>
    void MainWindow::on_pushButton_clicked()
    {
        //Datenbank setzen (Ich brauche eine .db Datei)
        QSqlDatabase DATABASE;
        DATABASE = QSqlDatabase::addDatabase("QSQLITE");
        DATABASE.setDatabaseName("E:\C++\Qt\207_Tabelle\DBDATEI.db");
    
        QSqlTableModel *MODEL = new QSqlTableModel;
    
        //Tabelle setzen
        MODEL->setTable("Name");
    
        MODEL->setHeaderData(0, Qt::Horizontal, "001");
        MODEL->setHeaderData(1, Qt::Horizontal, "002");
        MODEL->setHeaderData(2, Qt::Horizontal, "003");
    
        //Selektieren
        MODEL->select();
    
        QTableView *VIEW = new QTableView;
        VIEW->setWindowTitle("Die Tabelle");
        VIEW->setModel(MODEL);
        VIEW->resizeColumnsToContents();
        VIEW->resize(1000,600);
        VIEW->show();
    }
    

    Aber das ist wohl nicht richtig, denn es geht immer noch nicht.
    Eigentlich wollte ich einfach nur mal eine Tabelle anzeigen lassen.

    Öhm du hast dem Model die datenbank gar nicht zugewiesen...

    Schau dir mal genau das beispiel hier an: https://doc.qt.io/qt-5/qsqltablemodel.html#details



  • Weise ich so dem Modell die Datenbank zu?

    QSqlTableModel *MODEL = new QSqlTableModel(this, DATABASE);
    

    Wenn ich das oben in Zeile 11 einbaue geht es immer noch nicht.
    Und brauche ich wirklich eine db Datei um einfach nur eine Tabelle anzuzeigen?



  • @theAnfänger77 sagte in QTableView zeigt QSqlTableModel nicht an:

    Und brauche ich wirklich eine db Datei um einfach nur eine Tabelle anzuzeigen?

    ???

    Wozu ist denn QSqlTableModel wohl gut?

    Willst du vielleicht ein QTableWidget



  • Lies dir einfach das mal genau durch:
    https://doc.qt.io/qt-5/modelview.html#2-1-a-read-only-table

    Falls ein eigenes model zu komplex ist dann gibt es noch das QStandardItemModel



  • So ganz wie in der Doku hat das bei mir nicht funktioniert.
    Wenn das Modell von QAbstractTableModel erbt kann ich zum Beispiel keine Instanz mehr erzeugen.
    Hier ist meine Lösung. Es ist alles in einem Slot.

    Header:

    #include <QMainWindow>
    #include <QTableView>
    #include <QSqlDatabase>
    #include <QSqlTableModel>
    

    Slot:

    void MainWindow::on_buttonTabelleAnzeigen_clicked()
    {
       QSqlDatabase DATABASE;
       DATABASE = QSqlDatabase::addDatabase("QSQLITE");
       DATABASE.setDatabaseName("E:/C++/Qt/.../DBDATEI.db");
    
       //Wenn ich das QSqlTableModel auf dem Stack erzeuge, ist die Tabelle nur ein weißes Blatt
       //Deshalb erzeuge ich es auf dem Heap
       QSqlTableModel *MODEL = new QSqlTableModel;
       MODEL->setTable("name"); //Name hängt mit dem Tabellenname von DATABASE zusammen
       MODEL->select();
    
       //Wenn ich das QTableView auf dem Stack erzeuge, wird die Tabelle nur ganz kurz angezeigt
       //Deshalb erzeuge ich es auf dem Heap
       QTableView *VIEW = new QTableView;
       VIEW->setModel(MODEL);
       VIEW->resizeColumnsToContents();
       VIEW->resize(500,300);
       VIEW->show();
    }
    


  • Tolle Memory-Leaks!


Anmelden zum Antworten