Spin

Nesse tutorial iremos aprender a como fazer uma spin box. Iremos utilizar o QSpinBox, um widget feito para manipula inteiros e conjuntos discretos de valores.

Para começarmos o tutorial, temos o arquivo header, cpp e o main:

spinbox.h

#pragma once
#include <QWidget>
#include <QSpinBox>

class SpinBox : public QWidget {

  Q_OBJECT

  public:
    SpinBox(QWidget *parent = nullptr);

  private:
    QSpinBox *spinbox;
};

spinbox.cpp

#include <QHBoxLayout>
#include <QLabel>
#include "spinbox.h"

SpinBox::SpinBox(QWidget *parent)
    : QWidget(parent) {

  auto *hbox = new QHBoxLayout(this);
  hbox->setSpacing(15);

  spinbox = new QSpinBox(this);
  auto *lbl = new QLabel("0", this);

  hbox->addWidget(spinbox);
  hbox->addWidget(lbl);

  connect(spinbox, qOverload(&QSpinBox::valueChanged),
    lbl, qOverload(&QLabel::setNum));
}

main.cpp

#include <QApplication>
#include "spinbox.h"

int main(int argc, char *argv[]) {

  QApplication app(argc, argv);

  SpinBox window;

  window.resize(250, 150);
  window.setWindowTitle("QSpinBox");
  window.show();

  return app.exec();
}

Colocamos uma spinbox na janela e conectamos seu signal valueChanged (modificando o valor) ao slot setNum (modificando o número) da QLabel. Precisamos usar o qOverload duas vezes porque tanto o signal quanto o slot estão sobrecarregados. Esse é o trecho do código que faz a mágica:

  connect(spinbox, qOverload(&QSpinBox::valueChanged),
    lbl, qOverload(&QLabel::setNum));

Então temos o resultado: