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. -
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. -
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