Search code examples
c++qtqt5qtableviewqsqltablemodel

setHeaderData not working + qt


I am trying to make a library management software. I am using Qt and Sqlite3. In my main window constructor, i have this piece of code

@ellyanesc, added this on your recommendation:

db = QSqlDatabase :: addDatabase("QSQLITE");
model = new QSqlTableModel(this);

//QHeaderView view(Qt::Horizontal, this);
fileName = "Unnamed";

if(db.open())
{
    QSqlQuery query(db);
    query.exec("CREATE TABLE DEFAULT (NAME CHAR(100) PRIMARY KEY NOT NULL, AUTHOR CHAR(100) NOT NULL, UID CHAR(100)) ");

    db.setDatabaseName("/home/hemil/Documents/libre coupe.db");
    model->setTable("DEFAULT");
    model->select();

    model->setHeaderData(0, Qt::Horizontal, tr("NAME") );
    model->setHeaderData(1, Qt::Horizontal, tr("AUTHOR") );
    model->setHeaderData(2, Qt::Horizontal, tr("UID") );
}

ui->tableView->setModel(model);

No error shown but header does not show up


Solution

  • First you have to indicate where your database is located and open it, You should not use DEFAULT since it is a reserved word in SQL, change it to another name:

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("database.db");
    
    if(db.open()){
        QSqlQuery query;
        if(!query.exec("CREATE TABLE MYDEFAULT IF NOT EXISTS (NAME CHAR(100) PRIMARY KEY NOT NULL, AUTHOR CHAR(100) NOT NULL, UID CHAR(100)) ")){
            qDebug()<<query.lastError().text();
        }
    
        model = new QSqlTableModel(this);
        model->setTable("MyDEFAULT");
        model->select();
    
        model->setHeaderData(0, Qt::Horizontal, tr("NAME") );
        model->setHeaderData(1, Qt::Horizontal, tr("AUTHOR") );
        model->setHeaderData(2, Qt::Horizontal, tr("UID") );
        ui->tableView->setModel(model);
    }