2.8 输入控件(四)

简介: 2.8 输入控件(四)

2.8.7 QSpinBox 数值输入框

QSpinBox类是数值输入框,和它类似的有QDoubleSpinBox,QTimeEdit,QDateEdit,QDateTimeEdit。它们的功能都很类似,小豆君在这里就只介绍QSpinBox,其它的可查看帮助文档。


这个自旋框支持整数值,但可以扩展为使用validate()、textFromValue()和valueFromText()的不同字符串。


除了数值范围之外,通常还需要给用户一个特殊的(通常是默认的)选择。请参见setSpecialValueText(),了解如何使用QSpinBox实现此功能。

下面我们来看它的属性

01ebd755782e4c909dad0843d3544acf.jpeg

1 value:当前数值。

  • QSpinBox允许用户通过点击up/down按钮或按下键盘上的上下键来选择一个值,以增加/减少当前显示的值。用户还可以手动输入值。
  • 每次值改变QSpinBox时,都会发出两个valueChanged()信号,一个提供int,另一个提供QString。

2 singleStep:单步变化值;maximum:最大值;maximum:最小值。

  • 单击up / down按钮,或者使用键盘加速器的上下箭头,将增加或减少当前singleStep()步的值。可以使用一个构造函数来设置最小值,最大值和步长,并且可以稍后使用setMinimum()、setMaximum()和setSingleStep()来更改。默认是1。
  • QSpinBox也可以作为一个循环操作,即如果范围是0 - 99,而当前的值是99且wrapping()设置为真,点击“up”将会给出0。

3 prefix,suffix:前后缀;cleanText :不包含前后缀的字符串。

  • 还可以为输入的值设置前后缀。
  • text()用来显示完整字符串(包括任何前缀和后缀)
  • 使用cleanText()可以获得不带前缀或后缀的字符串。

4 displayInterBase:显示displayInterBase进制数。例如,2进制,16进制等。

2.8.8 示例

本示例做一个可以显示星期的spinBox,当你按上/下键时,spinBox可以显示星期一到星期日。

在原有的InputWidget的ui界面中继续添加一页,标签为QSpinBox,并且拖一个QSpinBox到界面。

01ebd755782e4c909dad0843d3544acf.jpeg

新建一个C++类WeekSpinBox,继承QSpinBox

weekspinbox.h

#ifndef WEEKSPINBOX_H
#define WEEKSPINBOX_H
#include <QSpinBox>
class WeekSpinBox : public QSpinBox
{
public:
    WeekSpinBox(QWidget* parent = 0);
protected:
    QValidator::State validate(QString &input, int &pos) const;
    int valueFromText(const QString &text) const;
    QString textFromValue(int val) const;
};
#endif // WEEKSPINBOX_H

weekspinbox.cpp

#include <QDebug>
#include "weekspinbox.h"
WeekSpinBox::WeekSpinBox(QWidget* parent):
    QSpinBox(parent)
{
    //一星期有七天,所以设置为1-7
    setMinimum(1);
    setMaximum(7);
    //设置可以循环,如果当前为星期日,则点击增加按钮,则会变成星期一
    setWrapping(true);
}
//验证器
//当你输入完按回车时,此函数用于验证输入的内容是否为所需要的内容。
//例如本例,当只有输入[一二三四五六七]时,才会接受。
QValidator::State WeekSpinBox::validate(QString &input, int &pos) const
{
    /*enum State {
        Invalid,//已经输入完毕(按回车),如果input不符合要求,则返回该值
        Intermediate,//还没输入完毕,但当前所输入的内容是符合要求的,则返回该值
        Acceptable//已经输入完毕,并符合要求,返回该值。
    };*/
    int value = valueFromText(input);
    if (value >= 1 && value <= 7)
    {
        return QValidator::Acceptable;
    }
    return QValidator::Invalid;
}
//如果需要将输入的文本解释为值时,就重新实现该函数。
int WeekSpinBox::valueFromText(const QString &text) const
{
    int index = tr("1234567一二三四五六七").indexOf(text);
    return index%7+1;
}
//如果需要将数字转化为文本,就重新实现该函数。
QString WeekSpinBox::textFromValue(int value) const
{
    QString txt = tr("一二三四五六天");
    return tr("星期%1").arg(txt.at(value-1));
}

再切换到ui界面,右击QSpinBox,选择提升为,这时弹出提升对话框,填入提升的类名WeekSpinBox,点击添加,提升。

01ebd755782e4c909dad0843d3544acf.jpeg

编译运行程序,点击增加/减少按钮,在spingBox中输入1-7或一到七,然后回车,看有什么变化。

本例中还不完善,如果输入相应的数字,就会显示对应的星期,但是如果输入“星期三”,则不会显示,想想这该如何完善。

提示:函数执行顺序:

validate()验证输入。在这里面可以使用正则表达式来判断。

valueFromText()将输入的文字转化为数字。

textFromValue()将数字转化为真正想要显示的字符串,供显示。


好了,关于QSpinBox的内容今天先讲到这里。

想要第一时间看到小豆君的更新,请关注微信公众号:小豆君,只要关注,便可加入小豆君为大家创建的C++\Qt交流群,方便讨论学习。

相关文章
|
6月前
如何让文本框显示提示信息
如何让文本框显示提示信息
38 0
|
6月前
根据用户是否输入和是否文本框内容为空来决定显示按钮颜色
根据用户是否输入和是否文本框内容为空来决定显示按钮颜色
41 0
|
6月前
|
C++
[Qt5&控件] Label控件显示文本内容(字符串和整数)
[Qt5&控件] Label控件显示文本内容(字符串和整数)
140 0
[Qt5&控件] Label控件显示文本内容(字符串和整数)
WPF限制文本框只能输入数字
WPF限制文本框只能输入数字
282 0
|
数据安全/隐私保护 C++
2.8 输入控件(一)
2.8 输入控件(一)
2.8 输入控件(一)
|
存储 前端开发 C++
2.8 输入控件(三)
2.8 输入控件(三)
2.8 输入控件(三)