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');
 }

0 ответов

Другие вопросы по тегам