QT:如何根据SpinBox的值来提高/降低标签的值

QT: How do I raise/lower value of label depending on value of SpinBox

本文关键字:标签 何根 SpinBox QT      更新时间:2023-10-16

首先让我说,我是QTCreator的新手。我有以下所有的UI设置,只是不知道如何正确连接信号和插槽:

好的,这就是我的问题。我有5个SpinBoxes,最大值为10,最小值为0,所有这些都从0开始。我有一个值为25的标签。当我用+/-按钮更改旋转框的值时,我希望标签减去或加回25的标签。此外,一旦值25达到0,我希望禁用所有用于添加的spinbox。

(不幸的是,由于我使用表单创建者设置了这一切,所有代码都是默认的。

示例:

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

SpinBoxes的所有值都等于24。当按下加号按钮时,所有框的值都将为25。因此,我希望所有的+按钮都被禁用,当按下-按钮时,我希望启用。

以下是假设您有一个带有标签和5个spinbox的表单类的代码。

标题:

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

我希望代码是不言自明的。Spinboxes不会在我的系统上禁用它们的按钮(尽管在使用另一种样式时可能会禁用),但当达到最大值时,加号按钮就会停止工作。