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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QDoubleValidator и locale  (Прочитано 3999 раз)
polina89
Гость
« : Январь 30, 2014, 17:31 »

Здравствуйте! У меня имеется делегат для модели. В одной из колонок находится QLineEdit. Для него устанавливаю QDoublevalidator
Код:
if (index.column()==2)
{
QLineEdit* editor=new QLineEdit(parent);
QDoubleValidator *validator=new QDoubleValidator(0.00,std::numeric_limits<double>::max(),2,editor);
validator->setNotation(QDoubleValidator::StandardNotation);
editor->setValidator(validator);
return editor;
}
При вводе числа позволяет использовать клавишу с символом ",". Как я поняла по документации, какой именно символ (точка или запятая) зависит от раскладки клавиатуры. В общем при вводе числа типа double через делегат в модели оказывается 0. Если вводить int(то есть без запятой), то все ок. Если отключить валидатор,  то и число типа double нормально сохранится в модель. В чем дело?Я думала как раз о locale. Вот на всякий случай запись в модель через делегат
Код:
void ItemDelegateRoute::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
QComboBox *comboBox;
QString str;
if (index.column() == 0)
{
comboBox = qobject_cast<QComboBox *>(editor);
model->setData(index, comboBox->currentText(), Qt::EditRole);
double check=modelComboBox->data(modelComboBox->index(comboBox->findText(comboBox->currentText()),2)).toDouble();
model->setData(model->index(index.row(),1),check, Qt::EditRole);

}

if (index.column()==2)
{
double checkkkk;
QLineEdit *lineEdit = qobject_cast<QLineEdit *>(editor);
model->setData(index, lineEdit->text().toDouble(), Qt::EditRole);
}

}
Записан
popper
Гость
« Ответ #1 : Февраль 02, 2014, 18:35 »

 В документации по QString::toDouble написано, что для чисел, дробная часть которых отделяется знаком, зависимым от локали, нужно
использовать QLocale::toDouble().
Записан
polina89
Гость
« Ответ #2 : Февраль 03, 2014, 17:49 »

Хорошо, большое спасибо!Я попробую!!!! Подмигивающий
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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