Mostrar otros datos en QTableView con QItemDelegate
-
19-09-2019 - |
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?
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));