QT: Как мне повысить / понизить значение метки в зависимости от значения SpinBox

Сначала позвольте мне сказать, что я новичок в QTCreator. У меня есть настройка пользовательского интерфейса для всего следующего, просто не могу понять, как правильно подключить сигналы и слоты:

Итак, вот моя проблема. У меня есть 5 SpinBox, все с максимальным значением 10 и минимальным значением 0, все из которых начинаются с 0. У меня есть метка со значением 25. Когда я изменяю значение spinbox с помощью кнопок +/-, я хочу, чтобы метка либо вычитала, либо добавляла обратно метку 25. Кроме того, когда значение 25 достигает 0 Я хочу, чтобы все спинбоксы были отключены для добавления.

(К сожалению, поскольку я настроил все это с помощью создателя форм, весь код используется по умолчанию.

Пример:

Label: 1
SB1: 5
SB2: 10
SB3: 2
SB4: 6
SB5: 1

Все значения SpinBoxes равны 24. При нажатии кнопки «плюс» значение будет 25 для всех ящиков. Таким образом, я хочу, чтобы все кнопки + были отключены, а когда нажата кнопка -, я хочу включить.

1

Решение

Вот код, предполагающий, что у вас есть класс формы с меткой и 5 спинбоксами.

Заголовок:

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();

};

Источник:

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));
}

Я надеюсь, что код не требует пояснений. Спинбоксы не отключают кнопки в моей системе (хотя они могут использовать другой стиль), но кнопки «плюс» перестают работать при достижении максимальной суммы.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]