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