Я новичок в Qt и у меня есть проблема, которую я не смог решить.
У меня есть область прокрутки, в которую я добавляю виджеты (какие виджеты не имеют значения). Каждый из виджетов имеет статический размер, и все они имеют одинаковую ширину (это может быть важно). Я пытаюсь сделать так, чтобы все эти виджеты отображались в области прокрутки по горизонтали до тех пор, пока не будет достаточно места для другого виджета, после чего он начинает помещать виджеты в новую строку, продолжая пока ничего не осталось.
Я думал о том, как реализовать это вручную, но я чувствую, что это то, что Qt уже поддерживает, и я просто не смог найти документацию по нему.
Вы можете увидеть Пример компоновки потока. Он демонстрирует пользовательский макет, который размещает дочерние виджеты слева направо и сверху вниз. Элементы сначала располагаются горизонтально, а затем вертикально, когда в каждой строке макета заканчивается свободное место.
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);