Как разрешить вводить в QLineEdit только числа?
Я не сталкивалась с формами. И сейчас только изучаю их.
Задача через форму нужно ввести 2 радиуса, поэтому на другие символы, кроме цифр нужно ввести запрет.
- Числа будут целыми. Достаточно типа int.
- Внешний радиус будет строго больше внутреннего радиуса. За этим нужно следить и не допустить ввода меньшего радиуса.
- Так как это все таки—радиусы… думаю нужно запретить вводить первым ноль. + Мне еще сказали, что запись ввода 00054 некорректна…
Как это реализовать, чтобы заработало?
Можно ли из формы достать введённые данные и передать в другой метод другого класса (не форма)?
И дополнительные вопросы
Читаю документации, смотрю видео, ищу в интернете...
Нашла идею как реализовать (но без подробностей и примера): существует QValidator. Необходимо переопределить его метод, а потом вызвать.
Видела в интернете строку
ui->lineEdit_R1->setValidator(new QDoubleValidator(-999.0,999.0, 2, this)); Но в моем случае не сработала. Возможно, я не поняла куда ее вписывать.
Также видела некое ограничение QRegExp rx("-?\\d{1,3}");
Еще бывают слоты. Можно подвязать действие вокруг QLineEdit к функции-ограничения на ввод символов.
Можно ли показать подробно как это все работать должно.
Строчка setValidator(new QDoubleValidator посимвольно обрабатывает ввод или после того как ввод будет закончен и нажат enter или клик на другую форму?
На будущее (для себя), что делать, если нужно было вводить числа double? Там ведь не только цифры, но и ограничение на одну точку.
Для красоты, если очистить значение в QLineEdit , то можно строкой кода, прописать серым подсказку: введите число больше внутреннего радиуса. Если текстом, то все хорошо, но если как пример "от 5". То число 5 изменяется...
Еще важно, что эта форма позволит менять радиусы, но если пользователь не зайдет на эту форму и не нажмёт ОК, то где-то в коде должны существовать значения по умолчанию. Где и как правильно это реализовать?
form_parameters.h
#ifndef form_parameters_H
#define form_parameters_H
#include <QDialog>
namespace Ui {
class form_parameters;
}
class form_parameters : public QDialog
{
Q_OBJECT
public:
explicit form_parameters(QWidget *parent = 0);
~form_parameters();
private slots:
void on_pushButton_OK_clicked();
private:
Ui::form_parameters *ui;
};
#endif // form_parameters_H
form_parameters.сpp
#include "form_parameters.h"
#include "ui_form_parameters.h"
form_parameters::form_parameters(QWidget *parent) :
QDialog(parent),
ui(new Ui::form_parameters)
{
ui->setupUi(this);
// не получилось, почему?
ui->line_innerRadius->setValidator(new QIntValidator(1, 1000, this));
ui->line_outerRadius->setValidator(new QIntValidator(1, 1000, this));
}
form_parameters::~form_parameters()
{
delete ui;
}
void form_parameters::on_pushButton_OK_clicked()
{
int innerRadius = ui->line_innerRadius->text().toInt();
int outerRadius = ui->line_outerRadius->text().toInt();
}
Ответы (1 шт):
В Qt и C++ есть несколько способов ограничить ввод в QLineEdit только числами:
1) Использование QValidator: Вы можете использовать классы QIntValidator или QDoubleValidator для ограничения ввода только целыми или вещественными числами соответственно.
#include <QIntValidator>
// Для целых чисел
myLineEdit->setValidator(new QIntValidator(this));
// Для вещественных чисел
myLineEdit->setValidator(new QDoubleValidator(this));
2) Использование QSpinBox или QDoubleSpinBox: Эти виджеты предназначены для ввода целых и вещественных чисел соответственно.
QSpinBox myInt;
myInt.setMinimum(-5);
myInt.setMaximum(5);
myInt.setSingleStep(1);
myInt.setValue(2);
3) Использование маски ввода InputMask: Это позволяет пользователю ввести только одну цифру от 0 до 9. Используйте несколько девяток, чтобы позволить пользователю ввести многозначное число (к примеру: 999).
myLineEdit->setInputMask("999");
