У меня есть QLineEdit
, где пользователь должен вводить только числа.
Итак, существует ли только числовое значение для QLineEdit
?
У меня есть QLineEdit
, где пользователь должен вводить только числа.
Итак, существует ли только числовое значение для QLineEdit
?
QLineEdit::setValidator()
, например:
myLineEdit->setValidator( new QIntValidator(0, 100, this) );
или же
myLineEdit->setValidator( new QDoubleValidator(0, 100, 2, this) );
Смотрите: QIntValidator, QDoubleValidator, QLineEdit :: setValidator
Лучше всего 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)));
Вы также можете установить inputMask
:
QLineEdit.setInputMask("9")
Это позволяет пользователю вводить только одну цифру от 0
до 9
. Используйте несколько 9
, чтобы позволить пользователю вводить несколько номеров. См. Также полный список символов, которые можно использовать в маске ввода.
(Мой ответ находится в Python, но его сложно преобразовать в С++)
Почему вы не используете QSpinBox
для этой цели? Вы можете установить невидимые кнопки вверх/вниз со следующей строкой кодов:
// ...
QSpinBox* spinBox = new QSpinBox( this );
spinBox->setButtonSymbols( QAbstractSpinBox::NoButtons ); // After this it looks just like a QLineEdit.
//...
Валидатор регулярных выражений
Пока другие ответы дают решения только для относительно ограниченного числа цифр. Однако, если вас интересует произвольное или переменное количество цифр, вы можете использовать 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
Если вы используете QT Creator 5.6, вы можете сделать это вот так:
#include <QIntValidator>
ui->myLineEditName->setValidator( new QIntValidator);
Я рекомендую вам поместить эту строку после ui- > setupUi (this);
Надеюсь, это поможет.