Как разрешить вводить в 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 шт):

Автор решения: Armen Legran

В 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");
→ Ссылка