добавление нескольких qslider и qspinner

Я добавляю QSlider и QSpinBox с этим кодом

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

Я хотел бы добавить 30 из них, как я могу сделать это циклом?


person sven    schedule 28.10.2013    source источник
comment
Какова ваша точная проблема с использованием цикла? Что вы пробовали?   -  person Frank Osterfeld    schedule 29.10.2013


Ответы (2)


Я бы сделал это следующим образом:

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);
person vahancho    schedule 28.10.2013

Вам следует взглянуть на сопоставитель сигналов Qt, поскольку он именно то, для чего он предназначен.

Класс преобразователя сигналов группирует сигналы, а затем повторно передает их на основе входного целого числа, QString или параметров виджета.

Я оставлю отображение сигнала читателю в качестве упражнения.

person Tyler Jandreau    schedule 28.10.2013
comment
Приведенный выше код только соединяет пару слайдер/спинбокс друг с другом, пока не требуется сопоставление сигналов. - person Frank Osterfeld; 29.10.2013
comment
Я не был уверен, нужно ли OP 30 уникальных слотов для каждого из спинбоксов, для чего потребуется преобразователь сигналов. - person Tyler Jandreau; 29.10.2013