以不能删除但修改的 0 启动 QLineEdit
Start a QLineEdit with a 0 that cant be deleted but modified
我需要启动一个只有一个 0 的 QLineEdit,但需要 2 个条件:
- 用户永远无法删除那个 0。
- 用户可以将 0 更改为更大的数字。
对我来说,最好的解决方案是使用 inputMasks,但由于您必须限制它们,所以这不是解决方案。然后我尝试使用 RegEx 但我无法使其工作。
如果您只需要一个货币符号,并且输入确实本质上是数字,那么使用 QSpinBox 而不是 QLineEdit 可能更容易,然后将货币字符设置为前缀:
QSpinBox* pSpinBoxCurrency = new QSpinBox( this );
pSpinBoxCurrency->setRange( 0, 9999 );
pSpinBoxCurrency->setPrefix("$");
这是一种快速简单的方法。如果您需要为该小部件提供更复杂的 input/output 功能,但它本质上仍然是数字的,那么下一个最佳步骤是子类化 QSpinBox 并重新实现 validate()、valueFromText()、textFromValue() 等。它仍然是一个 int或浮动在引擎盖下,但您可以更好地控制它的显示方式和它接受的输入。
在某些情况下,这仍然不足以满足我的需要,在这些情况下,我最成功地编写了一个新的小部件,该小部件显示 numbers/data 我想要的并且只是弹出允许输入数字的瞬态 pre-populated QSpinbox。但我建议首先尝试让 built-in 类 完成大部分你想做的事情。
我需要启动一个只有一个 0 的 QLineEdit,但需要 2 个条件:
- 用户永远无法删除那个 0。
- 用户可以将 0 更改为更大的数字。
对我来说,最好的解决方案是使用 inputMasks,但由于您必须限制它们,所以这不是解决方案。然后我尝试使用 RegEx 但我无法使其工作。
如果您只需要一个货币符号,并且输入确实本质上是数字,那么使用 QSpinBox 而不是 QLineEdit 可能更容易,然后将货币字符设置为前缀:
QSpinBox* pSpinBoxCurrency = new QSpinBox( this );
pSpinBoxCurrency->setRange( 0, 9999 );
pSpinBoxCurrency->setPrefix("$");
这是一种快速简单的方法。如果您需要为该小部件提供更复杂的 input/output 功能,但它本质上仍然是数字的,那么下一个最佳步骤是子类化 QSpinBox 并重新实现 validate()、valueFromText()、textFromValue() 等。它仍然是一个 int或浮动在引擎盖下,但您可以更好地控制它的显示方式和它接受的输入。
在某些情况下,这仍然不足以满足我的需要,在这些情况下,我最成功地编写了一个新的小部件,该小部件显示 numbers/data 我想要的并且只是弹出允许输入数字的瞬态 pre-populated QSpinbox。但我建议首先尝试让 built-in 类 完成大部分你想做的事情。