[Qt] QSpinBox, QDoubleSpinBox

이번 글에서는 QSpinBox와 QDoubleSpniBox를 사용하는 방법에 대해 알아보겠습니다.

UI

아래와 같이 ui 파일을 구성해줍니다. spin이라 검색하면 SpinBox, Double Spin Box가 표시됩니다.

그 다음 아래처럼 objectName을 설정해줍니다.

QSpinBox

우선 QSpinBox부터 만들어보겠습니다. 아래와 같이 Widget.h를 코딩해줍니다.

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;

public slots:
    void valueChangedSpinBox(int value); // QSpinBox 슬롯함수
};
#endif // WIDGET_H

그 다음 Widget.cpp에 아래와 같이 추가해줍니다.

#include "Widget.h"
#include "ui_Widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    ui->spinBox->setRange(-100, 100); // 범위
    ui->spinBox->setValue(0); // 값
    ui->spinBox->setPrefix(QString("Pre-")); // Prefix
    ui->spinBox->setSuffix(QString("-Suffix")); // Suffix
    ui->spinBox->setDisplayIntegerBase(16); // 진수
    ui->spinBox->setSingleStep(5); // 증감 되는 크기
    
    connect(ui->spinBox, SIGNAL(valueChanged(int)), this, SLOT(valueChangedSpinBox(int))); // QSpinBox 시그널&슬롯 연결
}

Widget::~Widget()
{
    delete ui;
}

void Widget::valueChangedSpinBox(int value)
{
    QString str = QString("spinbox value: %1").arg(value);
    ui->label_spinbox->setText(str);
}

실행 하면 아래와 같이 실행합니다.

QDoubleSpinBox

그 다음 QDoubleSpinBox를 코딩하겠습니다. Double Spin Box는 Spin Box와 비슷하지만 Spin Box는 정수(Integer)를 표시하고 Double Spin Box는 실수(Real Number)를 표시하고 있습니다.

QDoubleSpinBox 시그널 함수를 아래처럼 만들어줍니다.

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;

public slots:
    void valueChangedSpinBox(int value); // QSpinBox 슬롯함수
    void valueChangedDoubleSpinBox(double value); // QDoubleSpinBox 슬롯함수
};
#endif // WIDGET_H

그 다음 Widget.cpp에 아래와 같이 코딩합니다.

#include "Widget.h"
#include "ui_Widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    ui->spinBox->setRange(-100, 100); // 범위
    ui->spinBox->setValue(0); // 값
    ui->spinBox->setPrefix(QString("Pre-")); // Prefix
    ui->spinBox->setSuffix(QString("-Suffix")); // Suffix
    ui->spinBox->setDisplayIntegerBase(16); // 진수
    ui->spinBox->setSingleStep(5); // 증감 되는 크기

    connect(ui->spinBox, SIGNAL(valueChanged(int)), this, SLOT(valueChangedSpinBox(int))); // 시그널&슬롯 연결


    ui->doubleSpinBox->setRange(0.000, 100.000); // 범위
    ui->doubleSpinBox->setValue(0.000); // 값
    ui->doubleSpinBox->setPrefix(QString("Pre ")); // Prefix
    ui->doubleSpinBox->setSuffix(QString(" Suffix")); // Suffix
    ui->doubleSpinBox->setDecimals(2); // 소수점 자리수
    ui->doubleSpinBox->setSingleStep(0.05); // 증감 되는 크기

    connect(ui->doubleSpinBox, SIGNAL(valueChanged(double)), this, SLOT(valueChangedDoubleSpinBox(double))); // 시그널&슬롯 연결
}

Widget::~Widget()
{
    delete ui;
}

void Widget::valueChangedSpinBox(int value)
{
    QString str = QString("spinbox value: %1").arg(value);
    ui->label_spinbox->setText(str);
}

void Widget::valueChangedDoubleSpinBox(double value)
{
    QString str = QString("doublespinbox value: %1").arg(value);
    ui->label_doublespinbox->setText(str);
}

실행하면 아래처럼 실수에 대해 표시를 합니다.