Here is the code assuming that you have a form class with a label and 5 spinboxes.
Header:
class MainWindow : public QMainWindow {
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
double sum;
QList<QSpinBox*> spinboxes;
private slots:
void spinbox_value_changed();
};
Source:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
sum = 25;
ui->setupUi(this);
spinboxes << ui->spinBox_1 << ui->spinBox_2 << ui->spinBox_3
<< ui->spinBox_4 << ui->spinBox_5;
foreach(QSpinBox* spinbox, spinboxes) {
connect(spinbox, SIGNAL(valueChanged(int)),
this, SLOT(spinbox_value_changed()));
spinbox->setRange(0, sum);
}
spinbox_value_changed();
}
MainWindow::~MainWindow() {
delete ui;
}
void MainWindow::spinbox_value_changed() {
double current_sum = 0;
foreach(QSpinBox* spinbox, spinboxes) {
current_sum += spinbox->value();
}
double points_left = sum - current_sum;
if (points_left < 0) {
foreach(QSpinBox* spinbox, spinboxes) {
spinbox->setValue(0);
}
return;
}
foreach(QSpinBox* spinbox, spinboxes) {
if (points_left == 0) {
spinbox->setMaximum(spinbox->value());
} else {
spinbox->setMaximum(sum);
}
}
ui->label->setText(QString().setNum(points_left));
}
I hope the code is self-explanatory. Spinboxes don't make their buttons disabled on my system (though they might when using another style) but the plus buttons stop working when the max sum is reached.