Pregunta

Tengo un QTableView conectado con un QSqlTableModel.
En la primera columna, sólo hay fechas en este formato: 2010-01-02
Quiero esta columna para mostrar la fecha en este formato (pero sin cambiar los datos reales): 02.01.2010
Yo sé que tengo que crear una QItemDelegate para esta columna, pero no sé cómo puedo leer los datos existentes y sobrescribir con algo diferente. Tiene alguna idea de cómo manejar eso?

¿Fue útil?

Solución

Un delegado artículo no necesariamente cambiar los datos, que sólo hace que los datos. Además, si usted está usando Qt 4.4 o posterior, mira QStyledItemDelegate lugar -. Que es el tema de conciencia y se verá más bonito

Hay un ejemplo de delegados de artículos en este artículo (que parece ser un espejo de la documentación oficial que se ha reducido o desaparecido).

Dado que todo lo que realmente quiere hacer es personalizar el texto, ¿ha considerado el uso de un modelo de poder en lugar y que acaban de volver a su QString personalizado para DisplayRole de la columna de fecha?

Otros consejos

La solución más simple es crear una subclase QStyledItemDelegate y reimplementar displayText(...) es decir,

class DateFormatDelegate : public QStyledItemDelegate
{
public:
 DateFormatDelegate (QString dateFormat, QObject *parent = 0) : 
  QStyledItemDelegate(parent),
  m_dateFormat(dateFormat)
 {
 }

 virtual QString displayText(const QVariant & value, const QLocale & locale ) const
 {
  Q_UNUSED(locale);
  return value.toDate().toString(m_dateFormat);
 }

private:
 QString m_dateFormat;
};

A continuación, en su opinión -

setItemDelegateForColumn(/*date column*/, new DateFormatDelegate("MM.dd.yyyy", this));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top