Как я могу поместить QFormLayout в область прокрутки?

В моей программе есть главное окно, которое создает виджет wdg, Этот виджет имеет QFormLayout с 193 рядами. Я хочу иметь возможность прокрутить вниз QFormLayout, Я пытался сделать QScrollArea и интегрировать его с макетом и виджетом, но это приводит к тому, что виджет не отображается или полоса прокрутки не отображается. Я думаю, что это как-то связано с тем, что высота нового окна, кажется, равна длине полного макета и уходит за пределы экрана. Я попытался установить геометрию виджета на ограниченный размер, но он просто изменил положение, а не размер.
Результаты в виджете не отображаются:

QWidget *wdg = new QWidget;
QScrollArea *scroll = new QScrollArea;
QFormLayout *formLayout = new QFormLayout(wdg);
int lenght = keys.size();
for(int x=0; x<=lenght-1; x++)
{

QComboBox* combo = new QComboBox;
combo->addItem("Present");
combo->addItem("Present and Voting");
combo->addItem("Absent");
combo->addItem("Absent from Commitee");
combo->setProperty("MyIndex", x);
combo->setCurrentIndex(status[x]);
formLayout->addRow(keys.at(x),combo);
connect(combo, SIGNAL(currentIndexChanged(int)), this, SLOT(roll(int)));

}
scroll->setWidget(wdg);
wdg->setLayout(formLayout);

wdg->show();

Результаты в виджете показаны, но без полосы прокрутки или макета:

QWidget *wdg = new QWidget;
QScrollArea *scroll = new QScrollArea(wdg);
QFormLayout *formLayout = new QFormLayout();
int lenght = keys.size();
for(int x=0; x<=lenght-1; x++)
{

QComboBox* combo = new QComboBox;
combo->addItem("Present");
combo->addItem("Present and Voting");
combo->addItem("Absent");
combo->addItem("Absent from Commitee");
combo->setProperty("MyIndex", x);
combo->setCurrentIndex(status[x]);
formLayout->addRow(keys.at(x),combo);
connect(combo, SIGNAL(currentIndexChanged(int)), this, SLOT(roll(int)));

}
scroll->setLayout(formLayout);wdg->show();

0

Решение

Вы должны создать виджет, который содержит QFormLayoutи затем установите этот виджет на QScrollAreaи что QScrollArea вы должны установить его в виджете wdg через другой макет:

QWidget *wdg = new QWidget;
QScrollArea *scroll = new QScrollArea;

QWidget *content_widget = new QWidget;

QFormLayout *formLayout = new QFormLayout(content_widget);

QStringList items{"Present", "Present and Voting", "Absent", "Absent from Commitee"};

for(int x=0; x < keys.size(); x++)
{

QComboBox *combo = new QComboBox;
combo->addItems(items);
combo->setProperty("MyIndex", x);
combo->setCurrentIndex(status[x]);
formLayout->addRow(keys.at(x),combo);
connect(combo, SIGNAL(currentIndexChanged(int)), this, SLOT(roll(int)));
}

scroll->setWidget(content_widget);
wdg->setLayout(new QVBoxLayout);
wdg->layout()->addWidget(scroll);
wdg->show();

Выход:

введите описание изображения здесь

В следующих ссылка на сайт есть пример.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]