Pergunta

Eu tenho um QTableView conectado com um QSqlTableModel.
Na primeira coluna, existem apenas datas neste formato: 2010-01-02
Eu quero esta coluna para mostrar a data neste formato (mas sem alterar os dados reais): 02.01.2010
Eu sei que eu tenho que criar uma QItemDelegate para esta coluna, mas eu não sei como eu posso ler os dados existentes e substituí-lo com algo diferente. Você tem alguma idéia de como gerenciar isso?

Foi útil?

Solução

Um delegado do item não necessariamente alterar os dados, ele só processa os dados. Além disso, se você estiver usando o Qt 4.4 ou mais recente, olhada QStyledItemDelegate vez. - É tema-aware e vai olhar mais agradável

Há um exemplo de delegados de itens em este artigo (o que parece para ser um espelho da documentação oficial que agora está para baixo ou se foi).

Uma vez que tudo o que você realmente quer fazer é personalizar o texto, você já pensou em usar um modelo de proxy em vez e apenas devolver o QString personalizado para DisplayRole da coluna de data?

Outras dicas

A solução mais simples é criar um QStyledItemDelegate subclasse e Reimplementar displayText(...) ie

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;
};

Então, na sua opinião -

setItemDelegateForColumn(/*date column*/, new DateFormatDelegate("MM.dd.yyyy", this));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top