【问题标题】:QSpinBox thousand separatorQSpinBox 千位分隔符
【发布时间】:2012-03-05 16:51:56
【问题描述】:

使用 QSpinBox 是否可以在用户输入数字时显示数字的千位分隔符 像 10,000 哪种方法最好?

【问题讨论】:

    标签: c++ python qt pyqt qspinbox


    【解决方案1】:

    我知道这已经晚了,但这可能对其他人有所帮助。我用它来更新千位分隔符

    ui->doubleSpinBox->setGroupSeparatorShown(true);

    以ui的形式设置属性

    在我的 QDialog 表单中,我使用它来更新带有千位分隔符的金额,

    void DialogCashPayment::on_doubleSpinBox_valueChanged(double arg1){
         ui->doubleSpinBox->setValue(arg1);
    }
    

    编辑:

    发现数量为10k以上时,光标位置发生变化的BUG。我还不知道如何解决这个问题。也许有人可以解决这个问题。

    【讨论】:

    • 已测试连接到继承的 lineEdit() 对象上的事件。在这里可以得到文本光标的位置。然后就是比较转换前后的文字长度,重新定位光标到setCursorPosition()
    【解决方案2】:

    您可以继承QSpinBox 并重新实现textFromValue,它负责将值显示到旋转框小部件。可能的实现如下:

    QString MySpinBox::textFromValue(int value)
    {
       return this->locale()->toString(value);
    }
    

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

    【讨论】:

    • 它成功了,ty,但是当用户用键盘插入数字时它不会插入千位分隔符!当用户专注于 SpinBox 时,将插入千位分隔符!我该如何解决这个问题?对不起英语不好!
    • 您可以将valueChanged 信号与更新文本的自定义槽连接起来。请注意,在此插槽中,您应该暂时阻止信号(使用blockSignals(true))以避免无限循环。
    • 你如何真正更新这样的文本?
    • 我如何子类化?我把那个代码放在哪里?我把它放在我的 QDialog 表单的 cpp 中,它给了我 textFromValue 与 'QDoubleSpinBox' 中的任何声明不匹配