Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Spanish
  4. Formato de columna en QSqltableModel
Forum Updated to NodeBB v4.3 + New Features

Formato de columna en QSqltableModel

Scheduled Pinned Locked Moved Solved Spanish
5 Posts 2 Posters 1.7k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • L Offline
    L Offline
    Ladis
    wrote on last edited by
    #1

    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.

    1 Reply Last reply
    0
    • juankiJ Offline
      juankiJ Offline
      juanki
      Moderators
      wrote on last edited by
      #2

      Hola

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

      Un saludo

      Intenta explicar el problema lo más claro y detallado posible. Adjunta los errores y el código que creas da el error.
      Procura escribir correctamente y sin faltas de ortografía.

      Si la duda se solucionó, por favor, marca el tema como 'solucionado'.

      1 Reply Last reply
      0
      • L Offline
        L Offline
        Ladis
        wrote on last edited by Ladis
        #3

        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.

        1 Reply Last reply
        0
        • juankiJ Offline
          juankiJ Offline
          juanki
          Moderators
          wrote on last edited by
          #4

          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

          Intenta explicar el problema lo más claro y detallado posible. Adjunta los errores y el código que creas da el error.
          Procura escribir correctamente y sin faltas de ortografía.

          Si la duda se solucionó, por favor, marca el tema como 'solucionado'.

          1 Reply Last reply
          0
          • L Offline
            L Offline
            Ladis
            wrote on last edited by
            #5

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

            1 Reply Last reply
            0

            • Login

            • Login or register to search.
            • First post
              Last post
            0
            • Categories
            • Recent
            • Tags
            • Popular
            • Users
            • Groups
            • Search
            • Get Qt Extensions
            • Unsolved