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

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

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

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

2 ответов

6 просмотров

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

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

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

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

'frakturBold' => ['𝖆', '𝖇', '𝖈', '𝖉', '𝖊', '𝖋', '𝖌', '𝖍', '𝖎', '𝖏', '𝖐', '𝖑', '𝖒', '𝖓', '𝖔', '𝖕', '𝖖', '𝖗', '𝖘', '𝖙', '𝖚', '𝖛', '𝖜', '𝖝', '𝖞', '𝖟', '𝕬', '𝕭', '𝕮', '𝕯'...
Roma
4
Есть полностью собранная база "шрифтов" - подобных символов?
Shen
9
Короче получается только кнопки не поменять А кнопки вроде тоже слетают при редактировании не?
inc.
10
Дорогие друзья, есть тут те, Кто рад поучаствовать в работе и в команде над игровой платформой? Мы делаем игровую и уникальную платформу. Стек платформы Go и React. Нам ...
Александр Цивин :)
2
Тг будет банить бота который принимает донаты без stars? Бот буквально на 10-20 человек
Vexylon
6
Век живи, век учись и продолжай удивляться Carbon Оказывается, в Carbon дату можно задавать даже текстом 😲 <?php use Carbon\Carbon; $october_date = new Carbon("last sunday o...
Igor
3
Кто сколько за бота берёт? (Я покупать не хочу)
Ivan Aleksandrovich
10
а у тя шо за бот?
Андрей
6
Приветы. Если бот доступен только пользователям из России и Беларуси, старсы для него неизбежны? Как Apple планируется собирать платежи с покупок в сторе на территориях, где у...
Prokhor Chulkov
8
Qq, возможно сталкивался кто Повесил на бота обработку апдейтов типа chat_member, при этом апдейты доходят только когда с ботом что-то делают, на саб/ансаб юзеров ему насрать...
𐌍𐌄 ᕓ𐌄𐌓𐌌Ꝋ𐌓𐌄
13
Карта сайта