Название: 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
Хорошо, большое спасибо!Я попробую!!!! ;)
|