Seite 1 von 1

QTableView Daten vor der Anzeige anpassen. Wie?

Verfasst: 21. August 2009 14:20
von ekom
Hallo an alle!

Ich habe folgendes Problem. Muss die Date aus der SQLite-Tabelle nur für die Anzeige in QTabelView anpassen. In dem Fall geht es z.b. um das Datum.

Wie kann man das am besten machen?
Kann ich bei QSqlTableModel auch eigene SQL-Abfrage machen, wo ich das Datum in der Abfrage schon in den richtigen Format bringe?

Code: Alles auswählen

QSqlTableModel *model = new QSqlTableModel(this);
    model->setEditStrategy(QSqlTableModel::OnRowChange);
    
    model->setTable("gruppen");
    model->select();

    int index=model->record().indexOf("erstellt");
    QDateTime d=model->record(0).value(index).toDateTime();
    QString date=d.toString("dd.MM.yyyy hh:mm");


    model->setHeaderData(0, Qt::Horizontal, QObject::tr("ID"));
    model->setHeaderData(1, Qt::Horizontal, QObject::tr("Bezeichnung"));
    model->setHeaderData(2, Qt::Horizontal, QObject::tr("Beschreibung"));
    model->setHeaderData(3, Qt::Horizontal, QObject::tr("Parent ID"));
    model->setHeaderData(4, Qt::Horizontal, QObject::tr("Position"));
    model->setHeaderData(5, Qt::Horizontal, QObject::tr("Erstellt am"));
    model->setHeaderData(6, Qt::Horizontal, QObject::tr("Erstellt von"));
    model->setHeaderData(7, Qt::Horizontal, QObject::tr("Geaendert am"));
    model->setHeaderData(8, Qt::Horizontal, QObject::tr("Geaendert von"));
    model->setHeaderData(9, Qt::Horizontal, QObject::tr("Trash"));
    model->setHeaderData(10, Qt::Horizontal, QObject::tr("Tab-Mitarbeiter"));
    model->setHeaderData(11, Qt::Horizontal, QObject::tr("Sync ID"));

    ui->tableGruppen->setModel(model);


    ui->tableGruppen->resizeColumnsToContents();
    ui->tableGruppen->setColumnHidden(3,true);
    ui->tableGruppen->setColumnHidden(4,true);
    ui->tableGruppen->setColumnHidden(9,true);
    ui->tableGruppen->setColumnHidden(10,true);
    ui->tableGruppen->setColumnHidden(11,true);
    ui->tableGruppen->horizontalHeader()->setResizeMode(2, QHeaderView::Stretch);
    ui->tableGruppen->verticalHeader()->setHidden(true);

Verfasst: 21. August 2009 15:15
von Christian81
Ich würde sagen das ist ein Fall für QAbstractItemDelegate

Verfasst: 21. August 2009 15:18
von RHBaum
Beim SQLTableModel IMHO nicht ohne tricks, aber das QSQLQueryModel waer dann vielleicht das richtigere .... wenn du die formatierung per SQL-STatemant umsetzen willst.

Ansonsten kannst du die anzeigedaten, wie christian schon andeutet, ueber das deligate modifizieren. Was aber kleinwenig komplexer, aber auch eleganter und wiederverwendbarer ist.

Ciao ....

Verfasst: 23. August 2009 18:35
von ekom
Vielen Dank für eure Hilfe,

habe es erst mal über QSqlQueryModel gelöst. Werde mich aber trotzdem mit QAbstractItemDelegate beschäftigen müssen.

Gruß
Eugen