添加多个QSlider和QSpinBox

3
我使用以下代码添加了 QSliderQSpinBox:

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个,如何通过循环实现?

你使用循环的确切问题是什么?你尝试过什么? - Frank Osterfeld
2个回答

4

我会按照以下方式进行:

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

0

你应该看一下Qt信号映射器,因为它正是为此而设计的。

信号映射器类将信号分组,然后根据输入的整数、QString或小部件参数重新发出它们。

我会把信号映射留给读者作为练习。


上面的代码只是将一个滑块/微调器配对连接在一起,目前不需要信号映射。 - Frank Osterfeld
我不确定 OP 是否需要每个 spinbox 的 30 个唯一插槽,这将需要一个信号映射器。 - Tyler Jandreau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接