【问题标题】:QLineEdit -- how to enter single value -- with no spacesQLineEdit -- 如何输入单个值 -- 没有空格
【发布时间】:2013-09-29 10:23:58
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你不能在转换之前删除空格吗?或者有问题的输入示例是什么样的?

标签: qt qlineedit qtgui


【解决方案1】:

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

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

使用正确的 Decimal-to-Hexidecimal 函数(您没有提及您使用的语言),这将是一个合适的解决方案。

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

【讨论】:

【解决方案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 之间的小数。

【讨论】:

  • 你到底想在这里做什么..?
  • 谢谢...我会试试这个...你能不能也写一个声明...接受十六进制值...
  • 您打算输入什么格式的十六进制值。如果它是一个简单的十六进制数,那么 [0-9A-Fa-f] 就足够了。对于任何其他格式,以下链接可能会给您一些想法。 stackoverflow.com/questions/2760206/qvalidator-for-hex-input
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 2022-12-12
  • 1970-01-01
相关资源
最近更新 更多