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

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

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

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

3

Решение

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

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

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


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