Я использую JUCE / C ++.У меня есть два класса, которые взаимодействуют друг с другом следующим образом.
Первый класс «LabeledSlider» используется для создания вращающейся ручки с надписью на ней:
class LabeledSlider : public GroupComponent
{
public:
LabeledSlider(const String& name)
{
setText(name);
setTextLabelPosition(Justification::centredTop);
addAndMakeVisible(slider);
}
void resized() override
{
slider.setBounds(getLocalBounds().reduced(10));
}
Slider slider
{
Slider::RotaryHorizontalVerticalDrag, Slider::TextBoxBelow
};
};
Второй класс,LabeledGroup предназначен для того, чтобы объекты LabeledSliders были определены, сделаны видимыми и организованы через FlexBox.Это позволяет группировать кнопки:
class LabeledGroup : public GroupComponent
{
public:
LabeledGroup(const String& name)
{
setText(name);
setTextLabelPosition(Justification::centredTop);
addAndMakeVisible(dummy1);
addAndMakeVisible(dummy2);
addAndMakeVisible(dummy3);
addAndMakeVisible(dummy4);
}
void resized() override
{
//setBounds(getLocalBounds().reduced(10));
FlexBox knobBox1;
knobBox1.flexWrap = FlexBox::Wrap::wrap;
knobBox1.justifyContent = FlexBox::JustifyContent::flexStart;
knobBox1.alignContent = FlexBox::AlignContent::flexStart;
Array<LabeledSlider*> knobs1;
knobs1.add(&dummy1, &dummy2, &dummy3, &dummy4);
for (auto *k : knobs1)
knobBox1.items.add(FlexItem(*k).withMinHeight(80.0f).withMinWidth(80.0f).withFlex(1));
FlexBox fb1;
fb1.flexDirection = FlexBox::Direction::column;
fb1.items.add(FlexItem(knobBox1).withFlex(2.5));
fb1.performLayout(getLocalBounds().toFloat());
}
private:
LabeledSlider dummy1{ "Dummy 1" };
LabeledSlider dummy2{ "Dummy 2" };
LabeledSlider dummy3{ "Dummy 3" };
LabeledSlider dummy4{ "Dummy 4" };
};
Я хочу иметь возможность заменять списки объектов LabeledSlider, определенные вручную, на массивы и циклы.Таким образом, я могу определить члены каждого массива для каждого объекта LabeledGroup отдельно в других местах реализации.
Например.Создать объект LabeledGroup с именем «envelope» с ручками «Attack, Decay, Release, Sustain».И еще один объект LabeledGroup, называемый «искажение», с ручками «Drive, Level».
В качестве первого шага для этого я хотел бы реализовать некоторые базовые массивы в классе LabeledGroup, который у меня уже есть для тестирования.
В простейшем случае я хотел бы заменить строки:
addAndMakeVisible(dummy1);
addAndMakeVisible(dummy2);
addAndMakeVisible(dummy3);
addAndMakeVisible(dummy4);
на:
LabeledSlider group1string[] = { "dummy1", "dummy2", "dummy3", "dummy4" };
for (LabeledSlider& i : group1string)
{
addAndMakeVisible(i);
}
Нет ошибок при этом.Но ручки больше не отображаются, когда я строю с использованием этой замены.Так что это явно не работает.Должен ли цикл for повторить четыре строки, которые уже есть?Если нет, что я делаю не так в цикле?
Спасибо.