0

我制作了一个编辑器,我必须在每个字段中输入一个十六进制或十进制值。这里我使用的字段是 QLineEdit。

现在的要求是每个 Qlineedit 框只接受一个不带空格的值。然后我可以读取此文本值并将其直接从字符串转换为十进制。

是否可以让 QlineEdit 只接受一个没有空格的值?下图中的方框是 QLineEdit。

我不想在这里使用组合框。

在此处输入图像描述

4

2 回答 2

2

如果答案只是十进制,我建议您改用QSpinBox。我确实找到了一个关于如何实现Hexidecimal SpinBox的线程,但不幸的是,第三方小部件的链接已经失效。但是它确实说你可以:

子类 QSpinBox 并重新实现 textFromValue() 和 valueFromText() 以显示十六进制值。

使用正确的十进制到十六进制函数(您没有提及您使用的语言),这将是一个合适的解决方案。

另一种选择是使用QLineEdit.setValidator函数和QValidator的自定义子类来提供验证方法。为此,只需重新实现QValidator.validate函数来检查什么是“有效”值。

于 2013-09-29T10:34:09.237 回答
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 之间的小数。

于 2013-09-29T12:39:30.607 回答