Подтвердить что ты не робот

Установите QLineEdit для приема только чисел

У меня есть QLineEdit, где пользователь должен вводить только числа.

Итак, существует ли только числовое значение для QLineEdit?

4b9b3361

Ответ 1

QLineEdit::setValidator(), например:

myLineEdit->setValidator( new QIntValidator(0, 100, this) );

или же

myLineEdit->setValidator( new QDoubleValidator(0, 100, 2, this) );

Смотрите: QIntValidator, QDoubleValidator, QLineEdit :: setValidator

Ответ 2

Лучше всего QSpinBox.

И для двойного значения используйте QDoubleSpinBox.

QSpinBox myInt;
myInt.setMinimum(-5);
myInt.setMaximum(5);
myInt.setSingleStep(1);// Will increment the current value with 1 (if you use up arrow key) (if you use down arrow key => -1)
myInt.setValue(2);// Default/begining value
myInt.value();// Get the current value
//connect(&myInt, SIGNAL(valueChanged(int)), this, SLOT(myValueChanged(int)));

Ответ 3

Вы также можете установить inputMask:

QLineEdit.setInputMask("9")

Это позволяет пользователю вводить только одну цифру от 0 до 9. Используйте несколько 9, чтобы позволить пользователю вводить несколько номеров. См. Также полный список символов, которые можно использовать в маске ввода.

(Мой ответ находится в Python, но его сложно преобразовать в С++)

Ответ 4

Почему вы не используете QSpinBox для этой цели? Вы можете установить невидимые кнопки вверх/вниз со следующей строкой кодов:

// ...
QSpinBox* spinBox = new QSpinBox( this );
spinBox->setButtonSymbols( QAbstractSpinBox::NoButtons ); // After this it looks just like a QLineEdit.
//...

Ответ 5

Валидатор регулярных выражений

Пока другие ответы дают решения только для относительно ограниченного числа цифр. Однако, если вас интересует произвольное или переменное количество цифр, вы можете использовать QRegExpValidator, передавая регулярное выражение, которое принимает только цифры (как отмечено в комментарии user2962533), Вот минимальный, полный пример:

#include <QApplication>
#include <QLineEdit>
#include <QRegExpValidator>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QLineEdit le;
    le.setValidator(new QRegExpValidator(QRegExp("[0-9]*"), &le));
    le.show();

    return app.exec();
}

У QRegExpValidator есть свои достоинства (и это только занижение). Он допускает множество других полезных проверок:

QRegExp("[1-9][0-9]*")    //  leading digit must be 1 to 9 (prevents leading zeroes).
QRegExp("\\d*")           //  allows matching for unicode digits (e.g. for 
                          //    Arabic-Indic numerals such as ٤٥٦).
QRegExp("[0-9]+")         //  input must have at least 1 digit.
QRegExp("[0-9]{8,32}")    //  input must be between 8 to 32 digits (e.g. for some basic
                          //    password/special-code checks).
QRegExp("[0-1]{,4}")      //  matches at most four 0s and 1s.
QRegExp("0x[0-9a-fA-F]")  //  matches a hexadecimal number with one hex digit.
QRegExp("[0-9]{13}")      //  matches exactly 13 digits (e.g. perhaps for ISBN?).
QRegExp("[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}")
                          //  matches a format similar to an ip address.
                          //    N.B. invalid addresses can still be entered: "999.999.999.999".     

Подробнее о поведении в режиме онлайн-редактирования

Согласно документации:

Обратите внимание, что если в строке редактирования установлен валидатор, сигналы returnPressed()/editFinished() будут отправляться только в том случае, если валидатор возвращает QValidator :: Acceptable.

Таким образом, редактирование строки позволит пользователю вводить цифры, даже если минимальная сумма еще не достигнута. Например, даже если пользователь не вводил текст против регулярного выражения "[0-9]{3,}" (для которого требуется как минимум 3 цифры), редактирование строки по-прежнему позволяет пользователю вводить ввод для достижения этого минимального требования. Однако, если пользователь заканчивает редактирование, не удовлетворяя требованию "не менее 3 цифр", ввод будет неверным; сигналы returnPressed() и editingFinished() не будут излучаться.

Если регулярное выражение имеет максимальную границу (например, "[0-1]{,4}"), то редактирование строки остановит любой ввод после 4 символов. Кроме того, для наборов символов (т.е. [0-9], [0-1], [0-9A-F] и т.д.) Редактирование строки позволяет вводить только символы из этого конкретного набора.

Обратите внимание, что я тестировал это только с Qt 5.11 на macOS, а не на других версиях Qt или операционных системах. Но учитывая кроссплатформенную схему Qt...

Демонстрация: Regex Validators Showcase

Ответ 6

Если вы используете QT Creator 5.6, вы можете сделать это вот так:

#include <QIntValidator>

ui->myLineEditName->setValidator( new QIntValidator);

Я рекомендую вам поместить эту строку после ui- > setupUi (this);

Надеюсь, это поможет.