Flow QML Type: связь с моделью, динамическое добавление и удаление элементов
views, QML, View, flow, view, model, qml, вёрстка qml, Model
Надо: подтягивать из с++ список слов, делать из них кнопки. Ширина кнопок соответствует ширине текста. При заполнении одной строки (ряда) - переход на следующую.
С передачей данных из с++, сигналами и слотами, вроде пока понятно. На данный момент затруднения с вёрсткой. ListView и GridView не подходят.
Подходит Flow QML Type, но с ним нельзя работать как с моделью-представлением. Или можно?
https://doc.qt.io/qt-5/qml-qtquick-flow.html
Как динамически добавлять-убирать элементы Flow?
И как применить свойства для каждого элемента Flow, как в данном случае это сделано для первого id: first_button
import QtQuick 2.12 import QtQuick.Window 2.12 import QtQuick.Controls 2.12 Window { visible: true width: 640 height: 480 title: qsTr("Hello World") Flow { id: flow_id anchors.top: parent.top anchors.horizontalCenter: parent.horizontalCenter anchors.margins: 4 spacing: 10 width: parent.width/1.5 Button { id: first_button Text { id: first_button_text text: "Text" font.pointSize: 15 anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter } width: first_button_text.width + 12 } Button { text: "items"; font.pointSize: 15 } Button { text: "flowing"; font.pointSize: 15 } Button { text: "inside"; font.pointSize: 15 } Button { text: "a"; font.pointSize: 15 } Button { text: "Flow"; font.pointSize: 15 } Button { text: "item"; font.pointSize: 15 } } }
Как ещё можно было бы, я думаю: создать Row определённой ширины, добавлять в него кнопки и следить за суммой ширины кнопок, если ширина кнопок (с учётом margin конечно) на следующей итерации больше ширины Row то создавать следующий Row и так далее. Опять же, я не представляю как это сделать на практике. С model->view всё было как-то проще.

We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.Do you like it? Share on social networks!
- Unknown akadamn
- Jan. 24, 2025, 5:14 p.m.
Qt - Test 001. Signals and slots
- Result:84points,
- Rating points4
- Unknown akadamn
- Jan. 24, 2025, 4:22 p.m.
Qt - Test 001. Signals and slots
- Result:42points,
- Rating points-8


Полагаю, что нужно использовать Repeater. Он может формировать объекты из модели. Если добавлять и убирать объекты в модели, то по идее Repeater должен перестраивать объекты во flow.
Здесь уже обсуждался кейс, подобный вашему - ссылка на сообщение
Класс, похоже то что надо, спасибо.
Что-то не получалось, собирался задать вопрос, но вроде разобрался. Пока разбирался сделал кракозябру из кода по ссылке и кода из урока QML - Урок 007. ListView Qml . Не пропадать же добру, пусть будет.
Пояснение: добавил к примеру ListView Qml --> Flow с Repeater'ом. Оба подсосаны к одной модели и в таком виде без ругани работают (пока что) как ожидается.
А вопрос на котором споткнулся решился тем что в репитере text: model.text заменил на text: modelData