Russian Qt Forum
Сентябрь 21, 2024, 08:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QT4 - Отобр. чисел с плав. точк. в русс. стандарте с запятой  (Прочитано 4431 раз)
pacmanoid
Гость
« : Сентябрь 24, 2006, 21:11 »

Работаю с базами данных. Есть QTableWiev - который отображает таблицу с содержащимися в ней числами с плавающей точкой в Американском формате с изображением разделения разрядов с помощью точки. Мне же необходимо отображать их с разделением с помощь запятой, ну как пологается в русском стандарте. И вообще возможно ли перевести всю систему приложения на ввод и отображение дат и чисел в русском стандарте, эдак глобально? Или же везде надо задавать маски отображения и ввода, а также в таблицах использовать собственные делегаты? Подскажите пожалуста, кто знает!!!
Записан
Alexei
Гость
« Ответ #1 : Сентябрь 25, 2006, 11:30 »

К сожалению, для этого в таблице надо использовать собственные делегаты, так как порывшись в исхониках, обнаружил, что для отображения даты используется формат Qt::ISODate (функция convert из файла qvariant.cpp).

Правда, это можно самому поменять в исходниках и пересобрать.
Записан
pacmanoid
Гость
« Ответ #2 : Сентябрь 25, 2006, 12:52 »

Цитата: "Alexei"
К сожалению, для этого в таблице надо использовать собственные делегаты, так как порывшись в исхониках, обнаружил, что для отображения даты используется формат 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);
Записан
Alexei
Гость
« Ответ #3 : Сентябрь 25, 2006, 16:52 »

См. выше про Qt::ISODate. При вызове стандартного делегата вызывается функция convert из qvariant.cpp
Записан
Sergeich
Гость
« Ответ #4 : Сентябрь 26, 2006, 11:56 »

Цитата: "pacmanoid"
И вообще возможно ли перевести всю систему приложения на ввод и отображение дат и чисел в русском стандарте, эдак глобально?  
См. класс QLocale и юзай QLocale::setDefault(...)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.049 секунд. Запросов: 20.