Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QT:如何根据SpinBox的值提高/降低标签的值_C++_Qt_User Interface_Qlabel_Qspinbox - Fatal编程技术网

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

C++ QT:如何根据SpinBox的值提高/降低标签的值,c++,qt,user-interface,qlabel,qspinbox,C++,Qt,User Interface,Qlabel,Qspinbox,首先让我说,我是新来的。我有以下所有的UI设置,只是不知道如何正确连接信号和插槽: 好的,这是我的问题。我有5个旋转框,最大值为10,最小值为0,它们都从0开始。我有一个值为25的标签。当我用+/-按钮更改spinbox的值时,我希望标签减去或加回25的标签。此外,一旦25的值达到0,我希望禁用所有Spinbox进行添加 不幸的是,由于我使用表单创建者设置了这一切,所以所有代码都是默认的 例如: Label: 1 SB1: 5 SB2: 10 SB3: 2 SB4: 6 SB5: 1 自旋框的

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

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

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

例如:

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

自旋框的所有值都等于24。点击加号按钮时,所有框的值均为25。因此,我希望禁用所有+按钮,当按下-按钮时,我希望启用。

下面是代码,假设您有一个带有标签和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));
}

我希望代码是不言自明的。Spinbox不会在我的系统上禁用按钮,尽管它们在使用其他样式时可能会禁用,但当达到最大和时,plus按钮将停止工作。

以下是假设您有一个带有标签的表单类和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));
}

我希望代码是不言自明的。Spinbox不会在我的系统上禁用其按钮,尽管在使用其他样式时可能会禁用,但当达到最大和时,加号按钮将停止工作。

查看该机制。请参阅。。我这样做了,我得到了,Obj1,SignalValueCudieTeNT,Obj2,StutStUnNoT。它将标签更改为SPECKBOX的确切数目,不能直接在设计器中执行,需要在C++中定义的连接到值技术的中间自定义槽,从spinbox中获取int并调用label->setNumvalue+1查看机制。请参阅。。我这样做了,我得到了,Obj1,SignalValueCudieTeNT,Obj2,StutStUnNoT。它将标签更改为SPECKBOX的确切数目,不能直接在设计器中执行,需要在C++中定义的连接到值技术的中间自定义槽,从spinbox中提取int并调用label->setNumvalue+1,还有许多示例与qtcreator捆绑在一起。@Pavel_Strakhov这很有效!我非常感谢你!我想我不会想到这个方法。。。这表明我在编程方面还有很多东西要学。再次感谢!还有很多与qtcreator捆绑在一起的示例。@Pavel_Strakhov这很有效!我非常感谢你!我想我不会想到这个方法。。。这表明我在编程方面还有很多东西要学。再次感谢!