Динамическое изменение размера qwidget и qlayout в зависимости от содержимого - PullRequest
0 голосов
/ 17 июня 2019

Я работаю над своим первым проектом в QT и у меня есть вопрос о динамическом изменении размеров виджетов и макетов.

Я занимаюсь разработкой qwidget, который будет содержать несколько виджетов на основе параметра, переданного конструктору qwidget. У меня возникают проблемы с изменением размера моего виджета, а также макета и группового блока, чтобы соответствовать количеству виджетов, переданных конструктором.

Мой qwidget в настоящее время содержит групповой блок и макет внутри этого группового блока. При создании виджета я добавляю виджеты в макет, а затем пытаюсь изменить размер макета, используя функции setSizeConstraint (), AdjustSize () и resize (). Похоже, что ничего из этого не изменяет размер виджета должным образом, поскольку мои виджеты все еще накладываются друг на друга.

Мой пользовательский интерфейс по сути это

QWidget

-> QGroupBox

-> QLayout

---> qwidget1

---> qwidget2

---> qwidget3

и т.д.. ниже находится конструктор

    myWidget::myWidget(int numRows) :
        myUiPtr(new UiLLmyWidget)
{
    //Add widget rows
    myUiPtr->setupUi(this);
    for(int i=0; i<numRows; i++)
    {
        myRowWidget *row = new myRowWidget();
        myUiPtr->myLayout->addWidget(row);
    }

    //Attempt to resize widget (doesn't work)
    myUiPtr->myLayout->setSizeConstraint(QLayout::SetMinimumSize);
    myUiPtr->myGroupbox->adjustSize();
    this->adjustSize();
}

Я ожидаю, что размер виджета и всех его дочерних групп изменится в соответствии с количеством виджетов, которые я создаю в макете, но этого не происходит, и вместо этого я получаю виджеты, перекрывающие друг друга.

1 Ответ

0 голосов
/ 17 июня 2019

вы можете попробовать следующее:

QGridLayout* layout = new QGridLayout();
layout->setAlignment(Qt::AlignTop);
myUiPtr->groupbox->setLayout(layout);

...
layout->addWidget(row, layout->count(), 0);

Вы можете использовать QScrollArea вместо (или внутри) Groupbox, поэтому небольшой размер окна вызывает перекрытие.

Редактировать:извините, я не рассматривал вопросы как часть "изменения размера виджета".

...