以DD:MM:SS格式(度,分,秒)输入纬度/经度的Qt4小部件的最佳起点是什么?自定义QLineEdit?一系列旋转盒?
答案 0 :(得分:6)
有一些变种:
带验证器的QLineEdit - 对我们来说还不够好,我们无法实现可用的编辑和正确的视图(有','和度符号到位,能够禁止不正确的值,仍然允许半正确的状态,并且目标行为不是标记错误并强制用户修复它们,而是允许用户只输入有效值。一行中有三个旋转编辑,它们之间的正确符号分组为一个小部件,一些代码用于在需要时将键盘输入从一个没有下一个移动等等。在某些情况下看起来很好,你可以找到实现的变体在着名的大理石项目中。
尽管如此,我的老板说这种方法几乎和第一次一样丑陋,所以这是另一种方法:子类QAbstractSpinBox,正如奇趣科技在他们的QDateTimeEditor中所做的那样。实际上,这样的小部件的行为几乎与在QDateTimeEditor中实现的小部件的行为类似。 我,我自己还没有这样做,导致任务优先,但必须这样做。
答案 1 :(得分:2)
我会使用QValidator
,使用QLineEdit::setValidator()
将其附加到QLineEdit
。
你需要子类,这样你就可以为你的特定情况实现validate()
函数和fixup()
函数,因为Qt中包含的两个验证器只包括整数和双精度。
在我看来,为这个提供一个单独的输入框而不是三个单独的旋转框(它看起来很混乱,输入效果不太好),这有点友善。
[编辑:另一种选择是使用QLineEdit::setInputMask()
在QLineEdit上设置“validation input mask”。例如,您可能需要使用已存在符号的行编辑和其他字符的占位符,此方法将为您提供类似的内容。 QtDemo应用程序有一个示例,您可以通过选择 Widgets-> Line Edits (小部件位于第二页)来查看。]