本系列文章长期更新修改.
QSpinBox,中文翻译是选值框?其实就是下面这玩意.
属性:
Methods
- __init__ (self, QWidget parent = None)
- QString cleanText (self)
- bool event (self, QEvent e)
- fixup (self, QString str)
- int maximum (self)
- int minimum (self)
- QString prefix (self)
- setMaximum (self, int max)
- setMinimum (self, int min)
- setPrefix (self, QString p)
- setRange (self, int min, int max)
- setSingleStep (self, int val)
- setSuffix (self, QString s)
- setValue (self, int val)
- int singleStep (self)
- QString suffix (self)
- QString textFromValue (self, int v)
- (QValidator.State, int pos) validate (self, QString input, int pos)
- int value (self)
- int valueFromText (self, QString text)
Qt Signals
- void valueChanged (int)
- void valueChanged (const QString&)
详细分析:
1.QDoubleSpinBox
QSpinBox是用来处理整数选值的输入框,若要实现浮点数的选值,需使用另一种选值框QDoubleSpinBox
2.输入
QSpinBox支持若干种输入方式,包括点击输入框旁边的上下按钮,鼠标滑轮的滑动或者按键盘的上下键,还有在输入框里直接输入数值.
3.信号
每当输入框里的数值被更改,信号valueChanged就会被激活.
两个信号,一个返回value,一个返回输入框实际的文本.
(使用返回文本的信号有时会导致奇怪的bug,待续)
4.min,max,step
QSpinBox有三个重要的属性值,min,max和step.
min和max就是限制输入的最大最小值(闭区间),step是按一次键盘上下键后,数值增加或减少的量.
这三个值有默认值,分别是0,99,1.
这三个值的获取和修改可以通过下列函数实现:
- int maximum (self)
- int minimum (self)
- setMaximum (self, int max)
- setMinimum (self, int min)
- setRange (self, int min, int max)
- setSingleStep (self, int val)
- int singleStep (self)
其中setRange相当于同时设置min和max.
5.反复循环
假如当前框里数值已经是最大值了,但你却继续按键盘的上,这时候应该有两种策略:
(1)数值不变
(2)数值变成最小值
默认的是数值不变这种,如果你想改变策略,你可以使用下列方法(true表示反复循环,默认是false):
- setWrapping (self, bool w)
- bool wrapping (self)
这两个方法是继承自QAbstractSpinBox的.
6.前缀后缀
有时候,我们的输入框里不仅仅是个数字,还有一些文字.
比如让你选择"第x天",虽然输入的核心是那个x,但我们需要一些辅助文字来提示用户.
并且,我们不希望这些文字影响到用户的数字输入,这时候我们可以设置前缀后缀的办法.
- QString prefix (self)
- setPrefix (self, QString p)
- setSuffix (self, QString s)
- QString suffix (self)
prefix是前缀,suffix是后缀
7.获取文本
有两个函数可以获取输入框的文本,一个是继承下来的text(),另一个是cleanText().
text()返回输入框实际的内容,而cleanText()会去除掉前缀后缀和前导后导空白.
- QString text (self)
- QString cleanText (self)
注意这两个函数返回的都是字符串.
8.特殊选项
有时候选值框除了可以选择数值之外,可能还有一个特殊的取值.
比如一个价格的选值框,可能有各种数值,还有一个"免费"的特殊取值.
这个时候我们可以用到下面的函数:
- QString specialValueText (self)
- setSpecialValueText (self, QString s)
注意这个特殊取值只有一个,并且会占用取值范围的最小值.
也就是说,虽然在输入框里的文本是"免费",但是用value()得到的是选值框取值范围的最小值.
9.文本验证
由于QSpinBox也支持键盘输入字符,因此我们需要对输入的文本进行合法性验证.
QSpinBox提供了类似于QValidator的验证,它直接提供了validate()和fixup()函数.
- (QValidator.State, int pos) validate (self, QString input, int pos)
- fixup (self, QString str)
这两个函数一般是Qt调用,参考QValidator篇.
10.文本与值的转换
QSpinBox使用下面两个函数实现文本里的数字和内部的值之间的转换.
这是QSpinBox内部一定会用到的函数,一般我们不直接使用这两个函数.
- int valueFromText (self, QString text)
- QString textFromValue (self, int v)