2010-01-06 6 views
6

У меня есть QTableView, связанный с QSqlTableModel.
В первом столбце, есть только даты в этом формате: 2010-01-02
Я хочу эту колонку, чтобы показать дату в этом формате (но не изменяя реальные данные): 02.01.2010
Я знаю, что я должен создать QItemDelegate для этого столбца, но я не знаю, как я могу читать существующие данные и перезаписывать их чем-то другим. У вас есть идея, как это сделать?Показать другие данные в QTableView с QItemDelegate

ответ

4

Делегат пункта не обязательно изменяет данные, он просто отображает данные. Кроме того, если вы используете Qt 4.4 или новее, посмотрите на QStyledItemDelegate вместо этого - это тема и будет выглядеть лучше.

В делегатах this article есть пример делегатов (который, кажется, является зеркалом официальной документации, которая теперь ушла или ушла).

Поскольку все, что вы действительно хотите сделать, это настроить текст, вы решили использовать вместо него прокси-модель и просто вернули свой настраиваемый QString для DisplayRole столбца даты?

+0

Либо делегат или модель прокси будет работать очень хорошо в этой ситуации. Однако делегат, вероятно, ближе к тому, что предназначено. –

+0

моя проблема в том, что я не понимаю, как это сделать с помощью QItemDelegate. метод paint() не будет работать для меня – Berschi

+0

Что, в частности, проблема с paint()? – ChrisV

14

Самым простым решением является создание QStyledItemDelegate подкласса и переопределение displayText(...) т.е.

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

Тогда на ваш взгляд -

setItemDelegateForColumn(/*date column*/, new DateFormatDelegate("MM.dd.yyyy", this)); 

 Смежные вопросы

  • Нет связанных вопросов^_^