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 sobrescribirlos con algo diferente. ¿Tienes alguna idea de cómo manejar eso?Mostrar otros datos en QTableView con QItemDelegate
6
A
Respuesta
4
Un elemento delegado no cambia necesariamente los datos, simplemente procesa los datos. Además, si está utilizando Qt 4.4 o una versión más nueva, mire QStyledItemDelegate en su lugar, tiene en cuenta los temas y se verá mejor.
Hay un ejemplo de delegados de elementos en this article (que parece ser un espejo de la documentación oficial que ahora está fuera de servicio o desaparecida).
Como todo lo que desea hacer es personalizar el texto, ¿ha considerado utilizar un modelo de proxy en su lugar y simplemente devolver su QString personalizado para la columna DisplayRole de la fecha?
14
La solución más sencilla 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));
Cuestiones relacionadas
- 1. QListWidget o QListView con QItemDelegate?
- 2. Cómo detectar DoubleClick en QTableView
- 3. ¿Cómo crear el modelo/vista QTableView con delegados personalizados (no editables)?
- 4. QTableView selectionChanged
- 5. Mostrando una columna QTableView oculta
- 6. Colocación de columnas en QTableView
- 7. Filas/Línea seleccionadas en la copia de QTableView en QClipboard
- 8. ¿Cómo establecer la alineación de texto en una columna de QTableView mediante programación?
- 9. Copiando parte de QTableView
- 10. ¿Cuál es la mejor manera de mostrar un icono animado en un QTableView?
- 11. Establecer color en una fila QTableView
- 12. ¿Cómo abrir un URL en una QTableView
- 13. atoi() con otros idiomas
- 14. Vim - Mostrar tipo de datos
- 15. Qt - QTableView - Botón que hace clic en la fila de la tabla
- 16. ¿Cómo mostrar datos usando Openlayers con OpenStreetMap en geodjango?
- 17. Qt/C++: Obteniendo los datos en una celda determinada en un QTableView
- 18. ¿Cómo ordenar un QTableView por una columna?
- 19. Creación de un menú emergente en Qt para QTableView
- 20. Determinar si QTableView tiene un editor abierto
- 21. Cómo actualizar QAbstractTableModel y QTableView después de la clasificación de la fuente de datos?
- 22. Configuración Orden de tabulación para QTableView en Qt 4.4
- 23. Diseño del 'modelo' para QTableView en PySide + SQLAlchemy.
- 24. QTableView tiene casillas de verificación no deseadas en cada celda
- 25. Mostrar datos de la base de datos SQL en Gridview
- 26. WPF - Mostrar entidad única con una plantilla de datos
- 27. ¿Cómo mostrar la imagen con datos de carga WebView?
- 28. ¿Cómo puedo mostrar los datos en QTableWidget y leer los datos con encabezado?
- 29. QTableView: ¿cómo creo correctamente un QModelIndex?
- 30. Mostrar usuarios con privilegios a la base de datos. MySQL
O bien el delegado o el modelo de poder que funciona bastante bien en esta situación. Sin embargo, el delegado probablemente esté más cerca de lo que pretendía. –
mi problema es que no entiendo cómo hacerlo con un QItemDelegate. el método paint() - no funcionará para mí – Berschi
¿Cuál es, específicamente, el problema con la pintura()? – ChrisV