Ребят, помогите, рассудите. Проблема: при добавлении в начало qabstractitemmodel на стороне

qml, listview, перематывает
до нового добавленного элемента. Однако надо чтобы он оставался на том же элементе. (например та же логика в подгрузке более старых сообщений в чате телеграм)
Наблюдение: если перематывать listview на высоту первого элемента (т. Е. Чтобы в верхней части экрана был виден второй элемент) и добавлять то получится ожидаемое поведение

Решение: со стороны c++ в конструкторе модели выполнить beginInsertRows и не добавлять при этом элемент в массив, и учитывать в data() что индексация будет начинаться с единицы. Со стороны qml добавить topMargin на высоту нулевого элемента (константа). В результате получится что первый элемент всегда скрыт и он будет нормально подгружать все элементы как в случае с fetchMore

Вопрос: можно ли так делать? Не будет ли потом никаких подводных камней?

2 ответов

5 просмотров

подводные камни будут как только кто-то другой начнет править модель и/или вью и не будет знать про это связку. Вообще звучит как либо косяк в коде, либо баг. Кьют последней версии?

import QtQuick 2.9 import QtQuick.Controls 2.2 import QtQuick.Layouts 1.3 ApplicationWindow { visible: true width: 640 height: 480 title: qsTr("Scroll") ListModel { id: myModel ListElement { name: "Test 1" } ListElement { name: "Test 2" } ListElement { name: "Test 3" } ListElement { name: "Test 4" } ListElement { name: "Test 1" } ListElement { name: "Test 2" } ListElement { name: "Test 3" } ListElement { name: "Test 4" } ListElement { name: "Test 1" } ListElement { name: "Test 2" } ListElement { name: "Test 3" } ListElement { name: "Test 4" } ListElement { name: "Test 1" } ListElement { name: "Test 2" } ListElement { name: "Test 3" } ListElement { name: "Test 4" } } property int count: 1 ColumnLayout { anchors.fill: parent Button { text: "New Item" Layout.fillWidth: true onClicked: { count += 1 myModel.append({ "name": "New Item " + count }) } } ScrollView { Layout.fillHeight: true Layout.fillWidth: true ListView { width: parent.width model: myModel delegate: ItemDelegate { text: name width: parent.width } } } } } вот я набросал. ListView как вкопанный при добавлении нового Item-a

Похожие вопросы

Обсуждают сегодня

А если изначально бот работал так : есть сайт онлайн школы. У каждого ученика свой кабинет. Где он авторизуется по своим данным. И уже в кабинете, на самом сайте делает оплату...
Денис 💡 Фрилансер
13
что это и почему оно? executor.start_polling(bot, skip_updates=True, on_startup=on_startup, File "/usr/local/lib/python3.10/dist-packages/aiogram/utils/executor.py", line 4...
𐌍𐌄 ᕓ𐌄𐌓𐌌Ꝋ𐌓𐌄
2
Напомните пожалуйста, v1.1 работает на PHP 8.2?
Ross
7
А что насчет FluentValidation? тоже ведь есть альтернатива у МС.
devman
13
Ребят, всем привет) Кто юзал/юзает Postgres? Я на MySQL сделал простенький сайт для диплома, но я внезапно обнаружил условие что надо было на Postgres) Проблема в том, что я н...
Dororo Steeeve
4
Спасибо. Начну с клиент-сервер. Там разберусь И еще вопрос - можно ли как то джобы отправлять на определенные клиенты? Например есть vdi и linux машина. Можно ли задачу оправ...
Sergey Ivanov
4
Читаю сейчас [нет, уже больше не читаю!] курсовую о Булгакове, написанную, похоже, с помощью ChatGPT. Это удивительный психоделический опыт. Текст в основном написан в стиле б...
✨ Uni [🌊 В отпуске]
1
Всем привет! подскажите, кто-то использовал vault + гео-распределенный etcd-кластер (мемберы в разных цодах)? какие есть подводные камни? и стоит ли вообще такое делать?
Василиса Васильева
4
Тут кто-то шарит в мед оборудовании?
Benz
10
Всем привет. Я только начал изучать nomad и есть несколько вопросов. Я хочу развернуть 1 сервер и 1 клиент чтобы потыкаться и пощупать как работает это. А можно ли развернуть...
Sergey Ivanov
2
Карта сайта