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