Russian Qt Forum

Qt => Общие вопросы => Тема начата: nova от Январь 14, 2007, 13:09



Название: QSqlTableModel и формат данных
Отправлено: nova от Январь 14, 2007, 13:09
Может кто нашел как в QSqlTableModel -> QTableView переопределить формат отображения чисел с плавающей точкой или даты.
1. для всей показываемой таблицы
2. для конкретного столбца
желательно не переписывая стандартного дегегата  8)

Спасибо.


Название: QSqlTableModel и формат данных
Отправлено: Alexei от Январь 14, 2007, 14:21
В файле $(QTDIR)\src\corelib\kernel\qvariant.cpp есть функция convert, которая вызывается при преобразовании типов. В ней есть строчки:

Код:

case QVariant::Date:
  *str = v_cast<QDate>(d)->toString(Qt::ISODate);
  break;
case QVariant::Time:
  *str = v_cast<QTime>(d)->toString(Qt::ISODate);


Qt::ISODate нужно заменить на свой формат и пересобрать corelib.
Сам не пробовал, но работать должно :D


Название: QSqlTableModel и формат данных
Отправлено: Dendy от Январь 14, 2007, 14:34
Цитата: "Alexei"
Qt::ISODate нужно заменить на свой формат и пересобрать corelib.


Ето из разряда вредньІх советов?


Название: QSqlTableModel и формат данных
Отправлено: Alexei от Январь 14, 2007, 17:24
Нет, это чтобы nova понял(а), что без делегатов не обойтись.


Название: QSqlTableModel и формат данных
Отправлено: nova от Январь 14, 2007, 18:21
Ну я это и так знал. Но надеялся что я тупой, и не все из доки понял, а есть более простой способ :)
К стати, какая жаль что его нету :). Для стандартных типов мог бы и быть.

Тогда переопределим вопрос.
Вот так работает:
Код:

void FloatItemDelegate::paint(QPainter * painter, const QStyleOptionViewItem & opt, const QModelIndex & index) const
{
  // prepare
  painter->save();

  drawDisplay(painter, opt, opt.rect,QString::number(index.model()->data(index, Qt::DisplayRole).toDouble(),'f',2));

  // done
  painter->restore();
}


Но судя по исходникам QItemDelegate я не все делаю шо надо.
Может у кого есть примерчик ШО НАДО  :P