在Qt4中,输入DD:MM:SS格式(度,分,秒)的纬度/经度小部件,最好的起点是什么?自定义QLineEdit?一系列旋转框?
有几种变体:
带验证器的QLineEdit - 对我们来说不够好,我们无法实现可用的编辑和正确的视图(包括逗号、单引号和度数符号,并能禁止不正确的值但仍允许半正确状态,目标行为不是标记错误并强制用户修复,而是允许用户只输入有效值)。
三个旋转编辑器放在一行中,它们之间有适当的符号,作为单个小部件分组,并使用一些代码在需要时将键盘输入从一个编辑器移动到下一个。在某些情况下看起来足够好,并且你可以在著名的Marble项目中找到其实现的变体。
尽管如此,我的老板说这种方法几乎和第一种一样难看,因此这里有另一种方法:子类化QAbstractSpinBox,就像Trolltech在他们的QDateTimeEditor中所做的那样。实际上,这种小部件的行为与QDateTimeEditor中实现的行为非常相似。我自己还没有做过,因为任务优先级的缘故,但将不得不这样做。
QValidator
,并将其附加到一个QLineEdit
中,使用QLineEdit::setValidator()
。
您需要子类化以便实现validate()
函数和可能的fixup()
函数,因为Qt附带的两个验证器仅涵盖整数和双精度浮点数。
在我看来,提供单个输入框要友好一些,而不是三个独立的旋转框(这可能看起来杂乱无序,并且不太容易输入)。
[编辑:另一种选择是在您的QLineEdit上设置“验证输入掩码”,使用QLineEdit::setInputMask()
。您可能需要一个已经放置符号并带有其他字符占位符的行编辑,例如,此方法将为您提供类似的东西。 QtDemo应用程序有一个示例,您可以通过选择小部件->行编辑(小部件在第二页)来查看它。]