Не могу понять почему неправильно отдает дату сохраненную в БД SqlLite через QSqlTableModel. Нужно что бы дата была в формате dd.mm.yyyy, а показывает yyyy.mm.dd.
Я создал своего делегата которые переолпределяет редактирование, отображение, и отрисовку даты в ячейке. В таблице дата отображается как надо и редактируется как надо. Но при попытке отфильтровать записи таблицы через QSortFilterProxyModel, он почему то отображает дату не как переопределено в делегате.
Переопределение делегата DateEdit:
DateEditDelegate::DateEditDelegate(QObject *parent)
: QItemDelegate(parent){}
QWidget *DateEditDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem &/*option*/,
const QModelIndex &/*index*/) const
{
QDateEdit *date = new QDateEdit(parent);
date->setFrame(false);
date->setMinimumDate(QDate(2015, 12, 01));
date->setMaximumDate(QDate(2099, 12, 01));
date->setDate(QDate::currentDate());
date->setCalendarPopup(true);
date->setDisplayFormat(dateFormat);
return date;
}
void DateEditDelegate::setEditorData(QWidget *editor,
const QModelIndex &index) const
{
QDate value = index.model()->data(index, Qt::EditRole).toDate();
QDateEdit *date = static_cast<QDateEdit*>(editor);
date->setDate(value);
}
void DateEditDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const
{
QDateEdit *date = static_cast<QDateEdit*>(editor);
date->interpretText();
model->setData(index, date->date(), Qt::EditRole);
}
void DateEditDelegate::updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option, const QModelIndex &/*index*/) const
{
editor->setGeometry(option.rect);
}
void DateEditDelegate::paint(QPainter *painter,
const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
QStyleOptionViewItemV2 opt = setOptions(index, option);
opt.displayAlignment = Qt::AlignLeft | Qt::AlignVCenter;
drawDisplay(painter, opt, opt.rect, index.data(Qt::DisplayRole).toDate().toString(dateFormat));
Модель для фильтрации назначаем на QTableView:
pModelProxyFilter = new QSortFilterProxyModel;
pTableView->setModel(pModelProxyFilter);
Назначение делегата на колонку с датой:
pTableView->setItemDelegateForColumn(1, pDateDelegate);
Потом делаю вот так:
qDebug() << pModelProxyFilter->data(pModelProxyFilter->index(2,1), Qt::DisplayRole).toString();
И получаю дату в формате yyyy.mm.dd. Почему так происходит? Ведь делегат переопределен.