目录
9.1 没有按钮 QAbstractSpinBox.NoButtons
9.2 加号和减号 QAbstractSpinBox.PlusMinus
9.3 向上箭头和向下箭头 QAbstractSpinBox.UpDownArrows
1 简介
父控件为QWidget
它下面有三个子控件
- QSpinBox 整形步长调节器
- QDoubleSpinBox 双精度浮点型步长调节器
- QDateTimeEdit 时间调节器
QSpinBox 整形步长调节器
QDoubleSpinBox 双精度浮点型步长调节器
QDateTimeEdit 时间调节器
2 基本操作
2.1 创建控件
2.2 调节大小
此时我们在控件中可以输入字符,但是点击右侧的上下两个按钮没有反应
- 因为它是一个基类,这两个按钮的方法没有在基类中写出来
3 控制文本框右侧的按钮
首先我们应该子类化此类,然后重写一些方法
3.1 设置是否可用 stepEnabled()
会返回名为QAbstractSpinBox.StepEnable的变量,它有以下三个值
我们子类化QAbstractSpinBox()然后重写stepEnabled()
当我们输入的内容为0时设置为上按钮可用,内容为9时设置为下按钮可用,当我们的值小于0或大于9,我们上按钮与下按钮都不可用,否则我们两个按钮都是可用的
- 注:stepEnabled()和槽函数差不多,我们每次点击按钮时才会触发
设置之后我们运行,没有报错,但是点击按钮无效果,我们应该再重写stepBy()
设置完可用后我们如果长按的话会有连续点击的效果
3.2 设置点击后按钮做什么 stepBy()
参数为整形,每按一次按钮就会调整整形个数字
这个就相当于槽函数一样,先这样设置
之后我们运行,在文本框中输入2
然后我们一次点击上按钮与下按钮
文本框中的内容不会变化,但是打印了调节的步长,上按钮步长是1,下按钮步长是-1
那我们现在要改变文本框中的值,我们应该这样写
multiple是倍数,由于steps是+1或-1,所以我们可以随意设置想更改的大小
由于这个控件是组合控件,有LineEdit与两个按钮组成,所以我们可以使用LineEdit的方法
运行之后我们输入2
点击一下上按钮
再点击一下下按钮
如果我们现在把倍数改成2,然后输入1
点击一下下按钮
会显示为-1,然后无论再点击上按钮或下按钮都无效
也就是说这两个函数的执行顺序是先执行stepEnabled返回按钮是否有效,如果当前状态有效(不管运算完的状态是否有效)则执行stepBy,之后再点击按钮时会再次判断是否有效
3.3 通过class设置文本框内的初始值
这里面的parent是这样的,我们设置默认为None,但是如果调用的时候给个parent,我们就按照给的parent走
我们也可以把初始值当作一个参数传进来
默认值还是为0
调用一下
默认为0
传入一个参数
3.4 长按加速按钮点击频率
我们依然用刚刚继承的子类,初始值使用默认的0,倍率改为1
3.4.1 设置 setAccelerated()
我们现在长按发现可以比之前的连续点击更快了,而且长按的时间越长,速度越快
3.4.2 获取 isAccelerated()
4 只读设置
我们依旧使用之前定义的类
4.1 设置 setReadOnly()
运行之后我们发现不能直接将文本输入进文本框中了,只能点击右侧的按钮调节文本框中的内容
4.2 获取 isReadOnly()
5 设置及获取文本内容
依然使用我们刚刚创建的类,搞一个按钮效果更加明显
5.1 获取
5.1.1 text()
把text()放在槽函数中
运行之后点击一下按钮
5.1.2 lineEdit().text()
现在我们把方法换为lineEdit().text()
运行之后点击一下按钮
在这里我们获取了QAbstractSpinBox中的QLineEdit,我们可以通过这个方法使用QLineEdit中的所有方法
5.2 设置 lineEdit().setText()
运行之后我们点击一下按钮
6 对齐方式
依然使用上面的类
6.1 设置 setAlignment()
- Qt.AlignLeft 左对齐
- Qt.AlignRight 右对齐
- Qt.AlignHCenter 居中
- Qt.AlignJustify 两端对齐
跟以前一样,两端对齐和左对齐的效果一样
我们之前在34.QLineEdit中都测试过,我们现在只选用居中对齐进行测试
运行出来的结果
6.2 获取 alignment()
7 周边框架
7.1 设置 setFrame()
这里的bool值默认为True(有框架),我们现在将其设置为False
7.2 获取 hasFrame()
8 清空文本内容 clear()
搞一个步长框加一个按钮
槽函数中放clear
运行后的初始状态
点击一下按钮
9 设置右侧按钮样式 setButtonSymbols()
括号内的参数可以为以下三种
9.1 没有按钮 QAbstractSpinBox.NoButtons
这个并不是隐藏,点那个周围的区域也没有反应
我们只能通过键盘上的上下键以及滚轮修改文本内容
9.2 加号和减号 QAbstractSpinBox.PlusMinus
据说是变成加减号,但是我使用了这个方法之后没有显示出来
9.3 向上箭头和向下箭头 QAbstractSpinBox.UpDownArrows
这个是默认值,就是开始咱们一直用的样式
10 内容验证
如果不是我们期望的内容则不会被输入到文本框中
我们需要重写这两个方法
- 注:此处返回的元组的input_text必须为一个字符串
我们直接照搬34.QLineEdit中的验证器就可以
由于我们给了一个0作为初始值,所以在等待判定的时候的条件要加入0
出现一个问题当我的文本框内没有内容时,我们点击按钮时会崩溃,我们搞一下stepEnabled
我们的思路是在文本框内容不能转为int时,让按钮失效
这样就没有问题了
当然也可以将按钮效用范围控制在0-180以内
11 信号
除从父类继承的信号外,只有以下一个信号
11.1 结束编辑信号 editingFinished()
涉及到结束编辑我们需要再放另一个控件,我们放一个le
运行的初始状态
直接切换焦点