К сожалению, для этого в таблице надо использовать собственные делегаты, так как порывшись в исхониках, обнаружил, что для отображения даты используется формат Qt::ISODate (функция convert из файла qvariant.cpp).
Правда, это можно самому поменять в исходниках и пересобрать.
Ну, понятно, надо написать чтото типа этого:
// -------------------------------------------
class SqlDelegate : public QItemDelegate
{
public:
SqlDelegate(QObject* parent = 0);
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;
private:
QLocale *locale;
};
SqlDelegate::SqlDelegate(QObject* parent )
:QItemDelegate( parent )
{
locale = new QLocale( QLocale::Russian, QLocale::RussianFederation );
}
void SqlDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option,
const QModelIndex& index) const
{
switch ( index.data().type() )
{
case QVariant::Date:
case QVariant::DateTime:
{
QStyleOptionViewItem opt = option;
QDate dt = index.data().toDate();
QString s = dt.toString("dd.MM.yyyy");
QVariant value = index.data(Qt::TextColorRole);
//if (value.isValid() && qvariant_cast<QColor>(value).isValid())
// opt.palette.setColor(QPalette::Text, qvariant_cast<QColor>(value));
opt.palette.setColor( QPalette::Text, Qt::blue );
opt.font.setBold( true );
opt.displayAlignment = Qt::AlignVCenter | Qt::AlignHCenter;
drawDisplay(painter, opt, opt.rect, s);
drawFocus(painter, opt, opt.rect);
return;
}
case QVariant::Int:
case QVariant::Double:
{
QStyleOptionViewItem opt = option;
double dt = index.data().toDouble();
QString s = locale->toString( dt );
QVariant value = index.data(Qt::TextColorRole);
//if (value.isValid() && qvariant_cast<QColor>(value).isValid())
// opt.palette.setColor(QPalette::Text, qvariant_cast<QColor>(value));
opt.displayAlignment = Qt::AlignVCenter | Qt::AlignRight;
drawDisplay(painter, opt, opt.rect, s);
drawFocus(painter, opt, opt.rect);
return;
}
default:
{
QItemDelegate::paint(painter, option, index);
return;
}
}
}
// --------------------------------------------
проверил, это работает.
Но по моему это не элегантно. Должен же быть какойнибудь способ на подобие:
QTextCodec *russCodec = QTextCodec::codecForName("UTF-8");
QTextCodec::setCodecForTr(russCodec);