QLineEdit, как ввести одно значение без пробелов

Я сделал редактор, в котором я должен ввести шестнадцатеричное или десятичное значение в каждое поле. Здесь я использую поле QLineEdit.

Теперь требуется, чтобы каждое поле Qlineedit принимало только одно значение без пробелов. Затем я могу прочитать это текстовое значение и преобразовать его непосредственно из строки в десятичное число.

Можно ли заставить QlineEdit принимать только одно значение без пробелов? Поля на рисунке ниже — это QLineEdit.

Я не хочу использовать поле со списком здесь.

введите здесь описание изображения


person Katoch    schedule 29.09.2013    source источник
comment
Разве вы не можете просто удалить пробелы перед преобразованием или как выглядит пример проблемного ввода?   -  person user2672165    schedule 29.09.2013


Ответы (2)


Чтобы основываться на ответе Lego Stormtroopr, я думаю, что QValidator - хороший и простой вариант. Например

dialog->lineedit1->setValidator(new QRegExpValidator( QRegExp("[0-9]{1,20}"), this ));

Здесь QRegExp означает, что вы должны принимать только цифры от 0 до 9 и никакие другие нажатия клавиш (пробелы или буквы), и вы должны принимать не менее 1 и не более 20 символов (цифр). Затем вы устанавливаете валидатор вашего lineedit на это значение. Для получения дополнительной информации вы можете посетить http://qt-project.org/doc/qt-5.0/qtcore/qregexp.html

или на двойку,

QDoubleValidator *myDblVal = new QDoubleValidator( 0.0, MAX_VALUE, 1, this);
myDblVal->setNotation( QDoubleValidator::StandardNotation );
dialog->lineedit1->setValidator( myDblVal );

Здесь вы просто используете встроенную функциональность Qt для двойной проверки. Вы должны принимать только десятичные числа от 0 до MAX_VALUE.

person Abhishek Bansal    schedule 29.09.2013
comment
что именно вы пытаетесь сделать здесь ..? - person Katoch; 29.09.2013
comment
спасибо ... я попробую это ... вы также можете написать одно выражение для ... принятия шестнадцатеричного значения ... - person Katoch; 30.09.2013
comment
Какой формат шестнадцатеричного значения вы планируете ввести. Если это простое шестнадцатеричное число, то [0-9A-Fa-f] будет достаточно. Для любого другого формата следующая ссылка может дать вам некоторое представление. stackoverflow.com/questions/2760206/qvalidator-for-hex-input< /а> - person Abhishek Bansal; 30.09.2013

Если бы ответ был просто десятичным, я бы предложил вместо этого использовать QSpinBox. Я нашел ветку о том, как реализовать шестнадцатеричный SpinBox, но, к сожалению, ссылка на сторонний виджет мертва. Однако он говорит, что вы могли бы:

подкласс QSpinBox и переопределить textFromValue() и valueFromText() для отображения шестнадцатеричных значений.

С правильной функцией преобразования десятичных чисел в шестнадцатеричные (вы не указываете, какой язык вы используете) это было бы подходящим решением.

Другой альтернативой является использование функции QLineEdit.setValidator с пользовательским подкласс QValidator для предоставления метода проверки. Для этого просто повторно реализуйте функцию QValidator.validate, чтобы проверить, что «действительное» значение.

person Community    schedule 29.09.2013
comment
Я использую язык С++. - person Katoch; 29.09.2013
comment
Кстати, эта ссылка на qxt была старой, вот текущая ссылка: libqxt.bitbucket.org/doc /0.6/qxtbasespinbox.html - person drescherjm; 29.09.2013