Показывать другие данные в QTableView с помощью QItemDelegate

StackOverflow https://stackoverflow.com/questions/2013052

Вопрос

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

Это было полезно?

Решение

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

Есть пример делегатов элементов в эта статья (что, по-видимому, является отражением официальной документации, которая сейчас недоступна или исчезла).

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

Другие советы

Самое простое решение - создать QStyledItemDelegate подкласс и переопределение 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;
};

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

setItemDelegateForColumn(/*date column*/, new DateFormatDelegate("MM.dd.yyyy", this));
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top