QSpinBox 千位分隔符

5

使用QSpinBox可以让用户输入数字时显示千位分隔符,例如10,000。最好的方法是什么?

2个回答

5
我知道我来晚了,但这可能会帮助其他人。我使用以下代码更新千位分隔符:ui->doubleSpinBox->setGroupSeparatorShown(true); 或者在表单 UI 中设置属性。
如下图所示: 在我的 QDialog 表单中,我使用这个代码更新带有千位分隔符的金额。
void DialogCashPayment::on_doubleSpinBox_valueChanged(double arg1){
     ui->doubleSpinBox->setValue(arg1);
}

编辑:

当金额超过10k时,发现一个错误,光标位置会改变。我还不知道如何解决这个问题。也许有人能够修复它。


已经测试连接到继承的 lineEdit() 对象上的事件。在这里可以获取文本光标位置。然后只需要比较转换前后的文本长度,并使用 setCursorPosition() 重新定位光标。 - user3342816

2
您可以通过继承 QSpinBox 并重新实现 textFromValue 方法来自定义 SpinBox 组件的显示值。以下是一个可能的实现示例:
QString MySpinBox::textFromValue(int value)
{
   return this->locale()->toString(value);
}

使用区域设置是最好的方式,因为它会根据用户的设置显示分隔符。


它可以工作,谢谢,但是当用户使用键盘输入数字时,它不会插入千位分隔符!当用户焦点移出该SpinBox时,千位分隔符将被插入!我该如何解决这个问题?对于糟糕的英语表示抱歉! - Sepehr Mohammad Pour
您可以将 valueChanged 信号连接到一个自定义槽,以更新文本。请注意,在此槽中,您应该暂时阻止信号(使用 blockSignals(true))以避免无限循环。 - pnezis
你怎么实际上更新文本呢? - Krenair
我怎么进行子类化?我将代码放在哪里?我把它放在我的QDialog表单的cpp文件中,但它给出了“textFromValue在'QDoubleSpinBox'中没有匹配的声明”的错误。 - Binsoi

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