Qt C++ Как заменить QDoubleValidator::fixup() из Qt 4.8 в Qt 5.9
После миграции моего Qt 4.8.4-Project на Qt 5.9.2 I на недавно настроенный ПК ( Win10) у меня возникла следующая проблема:
Когда я пытаюсь ввести число в QlineEdit моего GUI, я могу ввести что-то вроде 1,8 или 1,8 или даже 8. Но.8 не сработает. Мой компьютер полностью игнорирует точку и пишет 8. Когда я читаю значение из файла, компьютер запишет.8 в lineEdit, но затем я сталкиваюсь с проблемами при выполнении strictDoubleValidator::fixup(), который больше не включен в Qt 5.9.2. Таким образом, значение не заменяется, что приводит к ошибке. Как бы я сделал что-то вроде fixup () в Qt 5.9.2? Как бы я изменил неверные данные на правильные?
Я пытался изменить настройки своего региона: когда я изменяю знак разделения с ", " на " . " Я могу ввести.8, но не 8. Но мне нужно, чтобы оба входа были приняты. Как я могу разрешить обе записи (.8 и, 8), чтобы позволить пользователям из каждого региона использовать мой графический интерфейс?
В моем старом коде (Qt 4.7.4) подкласс QDoubleValidator и fixup () были реализованы так:
class StrictDoubleValidator : public QDoubleValidator
,
QValidator::State StrictDoubleValidator::validate(QString &input;, int & pos) const
{
int ctc = input.count(",");
int ctd = input.count(".");
if ( ctc + ctd > 1 )
return QValidator::Invalid;
QValidator::State a = QDoubleValidator::validate(input, pos);
return a;
}
void StrictDoubleValidator::fixup(QString &input;) const
{
if (input.isEmpty())
return;
input.replace(",",".");
if (input.at(0) == '.')
input.push_front('0');
if (input.at(input.length()-1) == '.')
input.push_back('0');
}