Ho un QTableView connesso con un QSqlTableModel.
Nella prima colonna, ci sono solo le date in questo formato: 2010-01-02
Voglio questa colonna per visualizzare la data in questo formato (ma senza modificare i dati reali): 02.01.2010
So che devo creare un QItemDelegate per questa colonna, ma non so come posso leggere i dati esistenti e sovrascriverli con qualcosa di diverso. Hai idea di come gestirlo?Mostra altri dati in QTableView con QItemDelegate
6
A
risposta
4
Un elemento delegato non modifica necessariamente i dati, ma esegue solo il rendering dei dati. Inoltre, se stai usando Qt 4.4 o più recente, guarda invece QStyledItemDelegate: è a conoscenza del tema e apparirà più gradevole.
C'è un esempio di delegati oggetto in this article (che sembra essere un mirror della documentazione ufficiale che ora è inattivo o mancante).
Dal momento che tutto ciò che si vuole veramente fare è personalizzare il testo, hai invece considerato l'utilizzo di un modello proxy e hai appena restituito il tuo QString personalizzato per la colonna DisplayRole della data?
14
La soluzione più semplice è quello di creare una sottoclasse QStyledItemDelegate
e reimplementare displayText(...)
cioè
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;
};
Quindi secondo lei -
setItemDelegateForColumn(/*date column*/, new DateFormatDelegate("MM.dd.yyyy", this));
Problemi correlati
- 1. Colonna virtuale in QTableView?
- 2. PyQt - Come impostare QComboBox in una vista tabella usando QItemDelegate
- 3. Come creare un modello/visualizzare QTableView con delegati personalizzati (non modificabili)?
- 4. PHP - Mostra altri articoli funzionalità feedback
- 5. Qt - QTableView - Pulsante cliccabile nella riga della tabella
- 6. QTableView Zoom avanti/indietro
- 7. Adattamento delle colonne in QTableView
- 8. Qt Nascondi colonna in QTableView
- 9. QTableView in MainWindow e tabulazione
- 10. PyQt QTableView rallenta in modo proibitivo quando si scorre con set di dati di grandi dimensioni
- 11. Come creare filtri per QTableView in PyQt
- 12. PySide + QTableView esempio
- 13. QTableWidget vs QTableView
- 14. NSFetchedResultsController che non mostra gli aggiornamenti da altri contesti
- 15. Come creare un QTableView veloce con celle formattate in HTML e selezionabili?
- 16. Aggiunta pulsante a QTableview
- 17. QTableView larghezza colonna
- 18. Aggiornamento efficiente di una QTableView ad alta velocità
- 19. Mostra dati dal database SQL in Gridview
- 20. Mostra suggerimento quando l'utente seleziona l'elemento in QComboBox
- 21. Qt/C++: acquisizione dei dati in una determinata cella in una QTableView
- 22. Convalida l'input dell'utente in un QTableView
- 23. Qt Elimina riga selezionata in QTableView
- 24. Copia di parte di QTableView
- 25. l'icona di carattere impressionante non viene visualizzata in IE 11, ma mostra in altri browser
- 26. Impostazione Ordine di tabulazione per QTableView in Qt 4.4
- 27. Connessione QTableView selectionChanged signal produce segfault con PyQt
- 28. Sostituire valori in frame di dati con altri valori in base a una regola
- 29. Determinare se QTableView ha un editor aperto
- 30. PyQt - Implementare un QAbstractTableModel per la visualizzazione in QTableView
Sia il delegato o il modello di delega avrebbe funzionato abbastanza bene in questa situazione. Il delegato è probabilmente più vicino a ciò che intendeva, comunque. –
il mio problema è che non capisco come farlo con un QItemDelegate. il metodo paint() - non funzionerà per me – Berschi
Cosa, in particolare, è il problema con paint()? – ChrisV