Qt автоматически упорядочивает виджеты в макете

#c #qt #layout #widget #flowlayout

#c #qt #макет #виджет #потоковое описание

Вопрос:

Я новичок в Qt, и у меня проблема, которую я не смог решить.

У меня есть область прокрутки, в которую я добавляю виджеты (что это за виджеты, не имеет значения). Каждый из виджетов имеет статический размер, и все они имеют одинаковую ширину (это может быть важно). Что я пытаюсь сделать, так это создать макет / настройку таким образом, чтобы все эти виджеты отображались в области прокрутки по горизонтали до тех пор, пока не останется достаточно места для другого виджета, после чего он начинает помещать виджеты в новую строку, продолжая, пока их не останется.

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

Ответ №1:

Вы можете увидеть пример компоновки потока. Он демонстрирует пользовательский макет, который упорядочивает дочерние виджеты слева направо и сверху вниз. Элементы сначала располагаются горизонтально, а затем вертикально, когда в каждой строке макета заканчивается место.

FlowLayout Класс наследуется QLayout . Это пользовательский класс макета, который упорядочивает свои дочерние виджеты по горизонтали и вертикали. Вы можете реализовать это, как показано в ссылке, и создать пользовательский виджет, который содержит макет потока, и установить его в качестве QScrollArea виджета.

 scrollArea->setWidgetResizable(true); // Important or else the widget won't expand to the size of the QScrollArea, resulting in the FlowLayout showing up as a vertical list of items rather than a flow layout
scrollArea->setWidget(new CustomWidget);
 

В конструкторе CustomWidget :

 // Create FlowLayout
FlowLayout *flowLayout = new FlowLayout;

// Populate FlowLayout with your widgets
for (int i=0; i<n; i  ) 
{
    ...
    flowLayout->addWidget(widget);
}

setLayout(flowLayout);