我制作了一个编辑器,我必须在每个字段中输入十六进制或十进制值。这里我使用的字段是QLineEdit。
现在要求每个Qlineedit框只接受一个没有空格的值。然后我可以阅读这个文本值&将它直接从字符串转换为十进制。
是否可以让QlineEdit只接受一个没有空格的值?下图中的方框是QLineEdit。
我不想在这里使用组合框。
答案 0 :(得分:2)
如果答案只是小数,我建议您改用QSpinBox。我找到了一个关于如何实现Hexidecimal SpinBox的线程,但不幸的是,第三方窗口小部件的链接已经死了。但它确实说你可以:
子类QSpinBox并重新实现textFromValue()和valueFromText()以显示十六进制值。
使用正确的十进制到十六进制函数(您没有提到您正在使用的语言),这将是一个合适的解决方案。
另一种方法是使用QLineEdit.setValidator函数和QValidator的自定义子类来提供验证方法。为此,只需重新实现QValidator.validate函数即可检查“有效”值。
答案 1 :(得分:1)
基于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之间的小数。