Russian Qt Forum

Qt => Вопросы новичков => Тема начата: polina89 от Январь 30, 2014, 17:31



Название: QDoubleValidator и locale
Отправлено: 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);
}

}


Название: Re: QDoubleValidator и locale
Отправлено: popper от Февраль 02, 2014, 18:35
 В документации по QString::toDouble написано, что для чисел, дробная часть которых отделяется знаком, зависимым от локали, нужно
использовать QLocale::toDouble().


Название: Re: QDoubleValidator и locale
Отправлено: polina89 от Февраль 03, 2014, 17:49
Хорошо, большое спасибо!Я попробую!!!! ;)