Есть некоторая форма на которой есть lineEdit
.
Для этого поля задан валидатор QDoubleValidator(0, 100000, 4)
Проблема такая: при вводе в поле вещественного значения(а оно представляется в виде 1234,1234 т.е. с запятой) данное значение чудным образом обращается в ноль. Целые же обрабатываются корректно. Я написал суррогатный пример для демонстрации этой аномалии:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QValidator>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->lineEdit->setValidator(new QDoubleValidator(0, 100000, 4));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
double _sPrice;
_sPrice = ui->label->text().toDouble();
//label располагается над LineEdit'oм
_sPrice += ui->lineEdit->text().toDouble();
ui->label->setText(QString::number(_sPrice));
}
Вопрос №1: В чём может быть дело? Как поправить? Вопрос №2: В чём смысл top значения у QDoubleValidator? Как я понял, он по QValidator::Acceptable не пропускает значения вне диапазона [bottom, top];
Изображения с наглядным представлением аномалии:
Проблема была из-за запятой. Заменив её точкой, строка преобразовывается в double
.
void MainWindow::on_pushButton_clicked()
{
double _sPrice;
_sPrice = ui->label->text().toDouble();
QString _strLineEditPrice = ui->lineEdit->text().replace(',', '.');
_sPrice += _strLineEditPrice.toDouble();
ui->label->setText(QString::number(_sPrice, 'g', 10));
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Неправильно записывает и читает из файлаЗаписывает age = 5и Name = "Масло", а выводит age=0 и Name = ""
Переустановил Windows, поставив английскую версию (United States)После этого все файлы кода в Visual Studio, которые были написаны на русской версии, искажены,...
На форме есть 2 lineEdit'aЕсть на форме куча кнопок а-ля цифровая клавиатура (делаю десктоп-приложение с адаптацией под тачскрины)