У меня есть, QLineEdit
где пользователь должен вводить только числа.
Так есть ли настройка только для цифр QLineEdit
?
QLineEdit::setValidator()
, например:
myLineEdit->setValidator( new QIntValidator(0, 100, this) );
или же
myLineEdit->setValidator( new QDoubleValidator(0, 100, 2, this) );
См .: QIntValidator , QDoubleValidator , QLineEdit :: setValidator
3.14e-7
).QDoubleSpinBox
не принимает числа в экспоненциальном представлении (Qt 5.5).Лучшее
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)));
источник
Валидатор регулярных выражений
Пока что другие ответы предоставляют решения только для относительно конечного числа цифр. Однако, если вас интересует произвольное или переменное количество цифр, вы можете использовать a
QRegExpValidator
, передавая регулярное выражение, которое принимает только цифры (как указано в комментарии пользователя 2962533 ). Вот минимальный полный пример:#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".
Подробнее о поведении редактирования в Интернете
Согласно документации :
Таким образом, редактирование строки позволит пользователю вводить цифры, даже если минимальная сумма еще не достигнута. Например, даже если пользователь не ввел какой-либо текст против регулярного выражения
"[0-9]{3,}"
(для которого требуется не менее 3 цифр), редактирование строки по-прежнему позволяет пользователю вводить ввод для достижения этого минимального требования. Однако, если пользователь завершит редактирование, не удовлетворив требование «минимум 3 цифры», ввод будет недопустимым ; сигналыreturnPressed()
иeditingFinished()
не будут испускаться.Если у регулярного выражения была максимальная граница (например
"[0-1]{,4}"
), то редактирование строки остановит любой ввод после 4 символов. Кроме того, для наборов символов (то есть[0-9]
,[0-1]
,[0-9A-F]
и т.д.) линия-редактирование позволяет только символы из этого конкретного набора должны быть введены.Обратите внимание, что я тестировал это только с Qt 5.11 на macOS, но не на других версиях Qt или операционных системах. Но учитывая кроссплатформенную схему Qt ...
Демонстрация: демонстрация валидаторов регулярных выражений
источник
Вы также можете установить
inputMask
:QLineEdit.setInputMask("9")
Это позволяет пользователю вводить только одну цифру в диапазоне от
0
до9
. Используйте несколько9
, чтобы позволить пользователю вводить несколько чисел. См. Также полный список символов, которые можно использовать в маске ввода .(Мой ответ на Python, но преобразовать его в C ++ не составит труда)
источник
Почему бы вам не использовать
QSpinBox
для этой цели? Вы можете сделать кнопки вверх / вниз невидимыми с помощью следующей строки кодов:// ... QSpinBox* spinBox = new QSpinBox( this ); spinBox->setButtonSymbols( QAbstractSpinBox::NoButtons ); // After this it looks just like a QLineEdit. //...
источник
Если вы используете QT Creator 5.6, вы можете сделать это следующим образом:
#include <QIntValidator> ui->myLineEditName->setValidator( new QIntValidator);
Я рекомендую вам поместить эту строку после ui-> setupUi (this);
Надеюсь, это поможет.
источник
new QIntValidator(this)
, иначе объект валидатора выйдет из строя, как только ваш виджет выйдет за пределы области видимости.