43.QAbstractSpinBox

  • Post author:
  • Post category:其他

目录

1  简介

2  基本操作

2.1  创建控件

2.2  调节大小

3  控制文本框右侧的按钮

3.1  设置是否可用 stepEnabled()

3.2  设置点击后按钮做什么 stepBy()

3.3  通过class设置文本框内的初始值

3.4  长按加速按钮点击频率

3.4.1  设置 setAccelerated()

3.4.2  获取 isAccelerated()

4  只读设置

4.1  设置 setReadOnly()

4.2  获取 isReadOnly()

5  设置及获取文本内容

5.1  获取

5.1.1  text()

5.1.2  lineEdit().text()

5.2  设置 lineEdit().setText()

6  对齐方式

6.1  设置 setAlignment()

6.2  获取 alignment()

7  周边框架

7.1  设置 setFrame()

7.2  获取 hasFrame()

8  清空文本内容 clear()

9  设置右侧按钮样式 setButtonSymbols()

9.1  没有按钮 QAbstractSpinBox.NoButtons

9.2  加号和减号 QAbstractSpinBox.PlusMinus

9.3  向上箭头和向下箭头 QAbstractSpinBox.UpDownArrows

10  内容验证

11  信号

11.1  结束编辑信号 editingFinished()


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

运行的初始状态

直接切换焦点


版权声明:本文为potato123232原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。