如何子类化QSpinBox以使其具有int64值作为最大和最小值

11

我需要实现一个 QSpinBox 控件,它应该能够处理 int64 类型的值作为其最小和最大值。当前的实现仅支持 int32 类型的值。

到最后,我的 QSpinBox 应该接受介于9223372036854775807和-9223372036854775808之间的任何值。

如果我想通过子类化 QAbstractSpinbox 来实现这一点,我需要做些什么?

1个回答

16
  1. 继承自QAbstractSpinBox
  2. QLineEdit添加QValidator以仅允许有效的int64值。
  3. 添加一个名为value的属性以提供对实际保存值的int64成员的访问。
  4. 重新实现stepBy(int steps)以修改数字。
  5. 实现您感兴趣的QSpinBox特定方法和属性(最小/最大限制,前缀,后缀等)。

基本上,您需要维护两个状态:一个是实际的int64值,另一个是由QLineEdit持有的文本。通常只需通过以下方式更新:

lineEdit()->setText(QString::number(myNumber));

但是如果用户想要前缀或后缀,它将需要稍微调整一下。


谢谢您的回答,但是我该如何创建一个验证器来验证Int64范围?QIntValidator只提供int32。 - warunanc
1
我想我必须子类化QValidator并创建自己的Int64Validator。 - warunanc
为什么不使用没有小数位的QDoubleSpinbox?您就不需要从QAbstractSpinbox派生了。 - Dimitry Ernot
5
由于双精度浮点数只有52位的尾数,所以无法存储比最大双精度整数还要大的值。这里有更详细的解释:https://dev59.com/G3I-5IYBdhLWcg3wc3-w - cmannett85

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