经度/纬度Qt4小部件?

6

在Qt4中,输入DD:MM:SS格式(度,分,秒)的纬度/经度小部件,最好的起点是什么?自定义QLineEdit?一系列旋转框?

2个回答

6

有几种变体:

带验证器的QLineEdit - 对我们来说不够好,我们无法实现可用的编辑和正确的视图(包括逗号、单引号和度数符号,并能禁止不正确的值但仍允许半正确状态,目标行为不是标记错误并强制用户修复,而是允许用户只输入有效值)。

三个旋转编辑器放在一行中,它们之间有适当的符号,作为单个小部件分组,并使用一些代码在需要时将键盘输入从一个编辑器移动到下一个。在某些情况下看起来足够好,并且你可以在著名的Marble项目中找到其实现的变体。

尽管如此,我的老板说这种方法几乎和第一种一样难看,因此这里有另一种方法:子类化QAbstractSpinBox,就像Trolltech在他们的QDateTimeEditor中所做的那样。实际上,这种小部件的行为与QDateTimeEditor中实现的行为非常相似。我自己还没有做过,因为任务优先级的缘故,但将不得不这样做。


1
你看过QLineEdit的输入掩码支持吗?我已经更新了我的答案,加入了这个替代方案。 - richardwb
是的,我也会尝试这个变体,问题在于输入掩码告诉小部件,在某些位置上有些符号是正确的,而在我们的情况下并不是这样的:也许有一些验证器和输入掩码逻辑的混合,既可以在正确的位置绘制度和分/秒标记,又可以处理正确的+/-/数字位置和范围问题。此外,我需要一个控件,可以处理不同的坐标格式(d.m.s、d.m,其中m是十进制数,距离以米为单位)。 - Maxim Popravko

2
我会使用一个QValidator,并将其附加到一个QLineEdit中,使用QLineEdit::setValidator()

您需要子类化以便实现validate()函数和可能的fixup()函数,因为Qt附带的两个验证器仅涵盖整数和双精度浮点数。

在我看来,提供单个输入框要友好一些,而不是三个独立的旋转框(这可能看起来杂乱无序,并且不太容易输入)。

[编辑:另一种选择是在您的QLineEdit上设置“验证输入掩码”,使用QLineEdit::setInputMask()。您可能需要一个已经放置符号并带有其他字符占位符的行编辑,例如,此方法将为您提供类似的东西。 QtDemo应用程序有一个示例,您可以通过选择小部件->行编辑(小部件在第二页)来查看它。]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接