Qt值输入控件(QSpinBox和QDoubleSpinBox)

本文详细介绍了Qt中QSpinBox和QDoubleSpinBox的使用方法,包括基本功能、属性设置、信号槽机制及自定义实现。展示了如何通过设置范围、步长、前缀和后缀来定制控件,以及如何利用槽函数和信号响应用户输入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

功能描述

QSpinBox旨在处理整数和离散值集(例如月份名称);使用QDoubleSpinBox作为浮点值。

QSpinBox允许用户通过单击上/下按钮或按键盘上的上/下按钮来选择一个值,以增加/减少当前显示的值。
用户也可以手动输入值。旋转框支持整数值,但可以扩展为使用带有validate(),textFromValue()和valueFromText()的不同字符串。

每次值更改时,QSpinBox都会发出两个valueChanged()信号,一个信号提供整数,另一个信号提供QString。 QString带有数值及其前后缀。可以使用value()获取当前值,并使用setValue()进行设置。

单击向上/向下按钮或使用键盘上的向上和向下箭头,将以singleStep()大小为步长来增大或减小当前值。如果要更改此行为,可以重新实现虚函数stepBy()。

大多数旋转框是定向的,但是QSpinBox也可以用作圆形旋转框,即,如果范围为0-99,并且当前值为99,则单击“向上”将给出0。如果需要循环行为,请使用setWrapping(true)。

可以在显示的值之前或之后附加任意字符串,这些字符串指示例如货币或度量单位。请参见setPrefix()和setSuffix()。旋转框中的文本使用text()(包括任何prefix()和suffix())或cleanText()(没有prefix(),suffix()且没有前导或尾随空格)检索。

除了数值范围外,通常还希望为用户提供特殊的选择(通常是默认设置)。有关如何使用QSpinBox执行此操作,请参见setSpecialValueText()。

由于QDoubleSpinBox用法和QSpinBox差不多,所以我们主要介绍QSpinBox,后面给一个QDoubleSpinBox的小例子。

基本用法

下面用一个小例子来展示QSpinBox的基本用法

效果

源码

    QSpinBox *spinBox = new QSpinBox(this);
    spinBox->setRange(5, 40);  // 变化范围
    spinBox->setSingleStep(1); // 步长
    spinBox->setValue(5);  // 起始默认值
    spinBox->setSpecialValueText(tr("minimum"));  // 特殊文本值,数值为最小时显示
    spinBox->setPrefix("height: ");  // 前缀
    spinBox->setSuffix(" m");  // 后缀
    spinBox->setWrapping(true);  // 开启循环

    QGridLayout *gridLayout = new QGridLayout;
    gridLayout->addWidget(spinBox);

    this->setLayout(gridLayout);

常用接口

属性

名称描述
cleanText : const QString数值字符串(不带前后缀以及前后空白)
singleStep : int步长
displayIntegerBase : int此属性保存用于显示旋转框值的基础
stepType : StepType步长类型(不变补偿和自适应变化步长)
maximum : int可输入最大值
suffix : QString前缀字符串
minimum : int可输入最小值
value : int当前值
prefix : QString后缀字符串

公共函数

  • 设置输入范围
    • setRange(int minimum, int maximum)
  • 设置步长
    • setSingleStep(int val)
  • 设置步长类型
    • setStepType(QAbstractSpinBox::StepType stepType)
  • 设置前后缀
    • setPrefix(const QString &prefix)
    • setSuffix(const QString &suffix)
  • 当前数值字符串
    • QString cleanText() const
  • 最大最小值
    • int maximum()
    • int minimum()
  • 当前值
    • int value ()
  • 值到字符串的转换
    • virtual QString textFromValue(double value) const

用来根据当前值(类内部值)显示特定的字符串(用户看到的值),用于自定义QSpinBox

  • 字符串到值的转换
    • virtual double valueFromText(const QString &text) const

用来根据用户输入的字符串来设定类的当前值,用于自定义QSpinBox。

槽函数

名称描述
void setValue(int val)设置当前值

信号函数

名称描述
valueChanged(int i)带整型值的信号
valueChanged(const QString &text)带字符串的信号(带有前后缀)

QDoubeSpinBox

QDoubleSpinBox可以用来输入浮点数。

效果

源码

    QDoubleSpinBox *doubleSpinBox = new QDoubleSpinBox(this);
    spinBox->setRange(5, 40);  // 范围
    spinBox->setSingleStep(1); // 步长
    spinBox->setValue(5);  // 当前值
    spinBox->setSpecialValueText(tr("minimum"));  // 特殊文本值,数值为最小时显示
    spinBox->setPrefix("height: ");  // 前缀
    spinBox->setSuffix(" m");  // 后缀
    spinBox->setWrapping(true);  // 开启循环

    QGridLayout *gridLayout = new QGridLayout;
    gridLayout->addWidget(spinBox);

    this->setLayout(gridLayout);

自定义QSpinBox

通过重写textFromValue和valueFromText来实现自定义QSpinBox

效果如下

源码

#ifndef MYSPINBOX_H
#define MYSPINBOX_H

#include <QSpinBox>

class MySpinBox : public QSpinBox
{
public:
    explicit MySpinBox(QWidget *parent = nullptr);

protected:
    // 将输入的文本解读为适当的值
    virtual int valueFromText(const QString &text) const Q_DECL_OVERRIDE
    {
        QRegExp regExp(tr("(\\d+)(\\s*[xx]\\s*\\d+)?"));

        if (regExp.exactMatch(text)) {
            return regExp.cap(1).toInt();
        } else {
            return 0;
        }
    }
    // 根据输入的值返回文本
    virtual QString textFromValue(int value) const Q_DECL_OVERRIDE
    {
        return tr("%1 x %1").arg(value);
    }
};

#endif // MYSPINBOX_H

引用

[1] Qt助手
[2] https://blog.csdn.net/liang19890820/article/details/52293073

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值