Formato de columna en QSqltableModel



  • Buenos días a todos.
    El caso es que recupero una tabla en un QSqltablemodel para ponerla en un tableView y una de las columnas que de fecha me la representa en un formato que no es el que quiero. Hay alguna forma de cambiar el formato de la columna bien sea en el modelo o en la tabla sin usar delegados (soy principiante, nunca los he utilizado y me parece complejo).
    Gracias.


  • Moderators

    Hola

    Utiliza un delegate, puede que parezca complejo, pero no lo es, en la documentación hay algún ejemplo.

    Un saludo



  • Gracias por responder.
    He estado con los delegates y, a partir del ejemplo spinboxDelegate he hecho algunas modificaciones. He creado un QDateEditDelegate, he creado una nueva columna para el modelo (con la fecha actual) y he añadido el nuevo delegate a esa columna.
    El problema que me surge y no se como solucionar es que la fecha se añade con el formato por defecto (supongo) y sólo al editar la celda entra en funcionamiento el delegate.
    Pongo el código del main. El delegate es prácticamente una copia del spinboxdelegate.

    #include "delegate.h"
    #include "dateeditdelegate.h"

    #include <QApplication>
    #include <QHeaderView>
    #include <QStandardItemModel>
    #include <QTableView>
    #include <QDebug>
    #include <QDate>

    int main(int argc, char *argv[])
    {
    QApplication app(argc, argv);
    DateEditDelegate dateDelegate;

    QStandardItemModel model(4, 3);
    QTableView tableView;
    tableView.setItemDelegateForColumn(2,&dateDelegate);
    tableView.setModel(&model);
    
    SpinBoxDelegate delegate;
    tableView.setItemDelegate(&delegate);
    
    tableView.horizontalHeader()->setStretchLastSection(true);
    
    
    for (int row = 0; row < 4; ++row) {
        for (int column = 0; column < 2; ++column) {
            QModelIndex index = model.index(row, column, QModelIndex());
            model.setData(index, QVariant((row + 1) * (column + 1)));
        }
    
    QModelIndex index = model.index(row,2,QModelIndex());
    QString fecha = QDate::currentDate().toString();
    qDebug() << fecha;
    model.setData(index, fecha);
    }
    
    tableView.setWindowTitle(QObject::tr("Spin Box Delegate"));
    tableView.show();
    return app.exec();
    

    }

    Alguna solución.
    Gracias.


  • Moderators

    Hola

    ¿Has implementado el método paint? En ese método es donde se "pinta" la celda y es el que tienes que aprovechar para imprimirla como tu quieras.

    Por ejemplo, esta sería una implementación del método paint de un QStyledItemDelegate muy sencilla:

    void NombreDeTuDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
    {
        QDate fecha = QDate::fromJulianDay(index.data().toInt());
        painter->drawText(option.rect, Qt::AlignCenter, fecha.toString("dddd, d 'de' MMMM 'de' yyyy"));
    }
    

    En el ejemplo supongo que los datos se guardaron usando el método QDate::toJulianDay().

    Un saludo



  • Muchas gracias por la ayuda.
    Con pequeñas modificaciones funciona perfecto.


Log in to reply
 

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