Sil*_*lfe 1 c++ user-interface qt qlabel qspinbox
首先让我说,我是QTCreator的新手.我有以下所有的UI设置,无法弄清楚如何正确连接信号和插槽:
好的,所以这是我的问题.我有5个SpinBox,全部最大值为10,最小值为0,所有这些都从0开始.我有一个值为25的标签.当我用+/-按钮改变旋转框的值时,我希望标签要么减去或加回25的标签.另外,一旦25的值到达0我希望禁用所有旋转框以进行添加.
(不幸的是,由于我使用Form创建器设置了所有这些,所以所有代码都是默认的.
例:
Label: 1
SB1: 5
SB2: 10
SB3: 2
SB4: 6
SB5: 1
Run Code Online (Sandbox Code Playgroud)
SpinBoxes的所有值都等于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();
};
Run Code Online (Sandbox Code Playgroud)
资源:
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));
}
Run Code Online (Sandbox Code Playgroud)
我希望代码是不言自明的.Spinboxes不会在我的系统上禁用它们的按钮(尽管它们可能在使用其他样式时),但加号按钮在达到最大总和时停止工作.
| 归档时间: |
|
| 查看次数: |
700 次 |
| 最近记录: |