美文网首页Qt学习PyQt
2.8 输入控件(四)

2.8 输入控件(四)

作者: 223480235e8e | 来源:发表于2018-02-24 10:15 被阅读27次

2.8.7 QSpinBox 数值输入框

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

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

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

下面我们来看它的属性

image.png

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到界面。

image.png

新建一个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,点击添加,提升。

image.png

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

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

提示:函数执行顺序:

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

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

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

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

想要更多干货,请关注微信公众号:小豆君,只要关注,便可加入我的C++\Qt交流群一起学习。

相关文章

  • 2.8 输入控件(四)

    2.8.7 QSpinBox 数值输入框 QSpinBox类是数值输入框,和它类似的有QDoubleSpinBox...

  • 2.8 输入控件(一)

    2.8.1 QLineEdit 2.8.1.1 属性 QLineEdit是行文本编辑框。我们直接来看它的属性。 就...

  • 2.8 输入控件(二)

    2.8.3 QTextEdit 富文本编辑器 2.8.3.1 富文本编辑器 与普通的纯文本相比,富文本其实就是可以...

  • 2.8 输入控件(三)

    2.8.5 QComboBox 下拉框 QComboBox提供了一个选项列表,这样就可以占用最少的屏幕空间。 1 ...

  • iOS控件 -UITextField/UITextView-文本

    此中所述两种UI控件,皆为文本输入控件,即可接收用户输入的UI控件。 >>>UITextField是作为文字输入控...

  • 小程序即时通讯

    小程序即时通讯——文本、语音输入控件(一)集成 小程序即时通讯——文本、语音输入控件(一)集成聊天输入组件控件样式...

  • Android输入控件详解

    输入控件 输入控件是您的应用用户界面中的交互式组件。Android 提供了多种可在 UI 中使用的控件,如按钮、文...

  • 【pyqt】2.控件学习

    控件 按钮 按钮 单选 多选 输入控件 纯键盘输入 多行输入 步长调节 组合框 滑块 橡皮筋选中 对话框-颜色,字...

  • 时间控件输入

    selenium.FindElementById("d1").Clear(); selenium.FindElem...

  • 文本输入控件

    2019年12月18日

网友评论

    本文标题:2.8 输入控件(四)

    本文链接:https://www.haomeiwen.com/subject/gqjuoxtx.html