Покажите другие данные в QTableView с QItemDelegate

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

6
задан Berschi 6 January 2010 в 13:06
поделиться

2 ответа

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

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

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

4
ответ дан 8 December 2019 в 12:20
поделиться

Самым простым решением является создание подкласса 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));
15
ответ дан 8 December 2019 в 12:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: