Мне соединили QTableView с QSqlTableModel.
В первом столбце существуют только даты в этом формате: 2010-01-02
Я хочу, чтобы этот столбец показал дату в этом формате (но не изменяя реальные данные): 02.01.2010
Я знаю, что должен создать QItemDelegate для этого столбца, но я не знаю, как я могу считать существующие данные и перезаписать их с чем-то другим. У Вас есть какая-либо идея, как управлять этим?
Делегат элемента не обязательно изменяет данные, он просто отображает данные. Кроме того, если вы используете Qt 4.4 или новее, посмотрите вместо него QStyledItemDelegate - он ориентирован на темы и будет выглядеть лучше.
В этой статье есть пример делегатов пунктов (который, похоже, является зеркалом официальной документации, которая сейчас не работает или исчезла).
Поскольку все, что вам действительно нужно, - это настроить текст, рассматривали ли вы возможность вместо этого использовать прокси-модель и просто возвращать настраиваемую строку QString для DisplayRole столбца даты?
Самым простым решением является создание подкласса 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));