Question

I add QSlider and QSpinBox with this code

QSpinBox *spinner2 = new QSpinBox;
QSlider *slider2   = new QSlider(Qt::Vertical);
spinner2->setRange(2,100);
slider2->setRange(2,100);
QObject::connect(spinner2, SIGNAL(valueChanged(int)), slider2, SLOT(setValue(int)));
QObject::connect(slider2, SIGNAL(valueChanged(int)), spinner2, SLOT(setValue(int)));
spinner2->setValue(10);

QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(slider2);
layout->addWidget(spinner2);

I would like to add 30 of them, how can I do it by a loop?

Was it helpful?

Solution

I would do that in the following way:

QWidget *widget = new QWidget;

// The main layout of the widget that will hold multiple spinner-slider pairs.
QVBoxLayout *mainLayout = new QVBoxLayout;

for (int i = 0; i < 30; i++) {
    QSpinBox *spinner2 = new QSpinBox(widget);
    QSlider *slider2   = new QSlider(Qt::Vertical, widget);
    spinner2->setRange(2, 100);
    slider2->setRange(2, 100);
    QObject::connect(spinner2, SIGNAL(valueChanged(int)), slider2, SLOT(setValue(int)));
    QObject::connect(slider2, SIGNAL(valueChanged(int)), spinner2, SLOT(setValue(int)));
    spinner2->setValue(10);

    QHBoxLayout *layout = new QHBoxLayout;
    layout->addWidget(slider2);
    layout->addWidget(spinner2);

    mainLayout->addLayout(layout);
}

widget->setLayout(mainLayout);

OTHER TIPS

You should have a look at the Qt signal mapper because that is exactly what it's designed to do.

The signal mapper class groups signals, and then reemits them based on an input integer, QString, or widget parameters.

I'll leave the signal mapping as an exercise to the reader.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top