Доброго времени суток.
Есть связка Model+View = наследник от QSqlQueryModel + стандартный QTableView. В модели переопределен метод data(), данные отображаются определенным образом (в зависимости от типа данных в ячейке): дата в формате dd.MM.yyy, время hh:mm и все по центру, числа выравнены по правому краю, текст - по левому, и др.
Понадобилось добавить возможность редактирования в ячейках. Унаследовался от QItemDelegate, опять же в зависимости от типа данных создаю свой editor, все нормально работает.
Не сразу и заметил, что в режиме просмотра (не редактирования) все красивое отображение пропало: дата в виде dd.MM.yy, у времени появились ненужные мне секунды.
Смотрю метод делегата paint:
void WDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const {
... // определение типа поля в ячейке
if (fieldType == "bool") {
// здесь все нормально
} else {
QItemDelegate::paint(painter, opt, index); // думал, этого достаточно для нормального отображения :(
}
}
Исправил на:
void WDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const {
... // определение типа поля в ячейке
if (fieldType == "bool") {
// здесь все нормально
} else {
if (option.state & QStyle::State_Selected) return;
QString aText = index.model()->data(index, Qt::EditRole).toString();
painter->drawText(
QRect(option.rect.left()+1,option.rect.top(),option.rect.width(),option.rect.height()),
Qt::AlignLeft | Qt::AlignVCenter,
aText
);
QItemDelegate::paint(painter, option, index);
}
}
И с интересом увидел, что дата теперь в формате yyyy-MM-dd, вместо QDateTime вообще невесть чего... Такое ощущение, что код index.model()->data(index, Qt::EditRole).toString(); возвращает не данные моей модели, а вообще невесть чего...
Кто объяснит, где я накосячил?