2013-09-29 1 views
0

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

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

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

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

enter image description here

+0

Не можете ли вы просто удалить пробелы перед преобразованием или как выглядит пример проблемного ввода? – user2672165

ответ

0

Чтобы построить ответ на 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.

+0

что именно вы пытаетесь сделать здесь ..? – Katoch

+0

Я отредактировал свой ответ, пожалуйста, проверьте. –

+0

спасибо ... я попробую это ... вы также можете написать один оператор для ... принятия значения Hex ... – Katoch

2

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

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

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

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

+0

Я использую язык C++. – Katoch

+0

Кстати, ссылка на qxt была старой, вот текущая ссылка: http: //libqxt.bitbucket.org/doc/0.6/qxtbasespinbox.html – drescherjm