Domanda

Ho un QTableView collegato 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 sovrascrivere con qualcosa di diverso. Avete qualche idea di come gestire questo?

È stato utile?

Soluzione

Un delegato di oggetto non significa necessariamente modificare i dati, li rende i dati. Inoltre, se si sta utilizzando Qt 4.4 o più recente, guarda QStyledItemDelegate invece -. È il tema-consapevole e avrà un aspetto più bello

C'è un esempio di delegati voce in questo articolo (che sembra per essere uno specchio della documentazione ufficiale che ora è ridotto o andato).

Dal momento che tutti si vuole veramente fare è personalizzare il testo, avete considerato utilizzando un modello di proxy invece e solo restituire il vostro QString personalizzato per DisplayRole della colonna di data?

Altri suggerimenti

La soluzione più semplice è quella 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));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top