Pull to refresh

Comments 10

Сразу скажу, что модель должна все равно быть в виде списка. Передать туда настоящую C++-модель таблицы, т.е. Производный класс от QAbstractTableModel не получится — будет видна только первая колонка.
А какой тогда смысл в TableVIew?
Смысл в том, что можно отображать данные в виде таблицы. Я немного дополнил статью:
Один элемент модели соответствует строке таблицы, а данные для столбцов берутся из ролей элемента.
Передать в QML-представление C++ таблицу, унаследованную от QAbstractTableModel вполне себе можно, просто надо перед этим поиграться с делегатами в этой самой модели.
Подробнее с примерами:
qt-project.org/wiki/How_to_use_a_QSqlQueryModel_in_QML
Это по сути то же самое, что и модель-список с разными ролями для одного элемента, только тут еще и костыль для преобразования из столбцов в роли. Если модель с данными строго в виде таблицы и ее менять нежелательно, на мой взгляд, лучше написать прокси-модель, которая будет переводить таблицу в список.
Радует то, что производительность в QtQuick 2 выросла настолько, что теперь без шуток его можно использовать в продакшене. Летает даже на андроиде :)
Интересна подкапотная реализация работы с делегатами, то есть как все работает under the hood, так сказать. Поясню. Портирую настольное приложение на андроид, QML + C++. По некоторым причинам пришлось отказаться от ListView и пришлось изобретать свой велосипед соблюдая принципы MVC. Отрисовка данных в делегаты сделана практически в лоб, для каждого элемента в списке создается инстанс делегата и свойства связываются с элементом модели, все это на JS. Как думаете, по какому принципу это реализовано в ListView, так же либо есть код на C++ отвечающий за это?
ListView написан на плюсах. Если интересно, реализацию можно посмотреть в qtdeclarative/src/quick/items/qquicklistview. Вообще, из стандартных компонентов на QML написаны только QtQuick Controls, да и то частично.

пришлось изобретать свой велосипед

Использовали Column/Row + Repeater + Flickable или какой-то другой способ?
Да, конечно, именно с этого и начинал. Довольно сложные делегаты используются (с точки зрения логики), плюс нужны особые жесты, а Flickable не дает все что нужно. С велосипедом код вышел проще, и моя отрисовка через делегаты на чистом JS сносно работает, но хотелось бы найти способ оптимальнее, думал может сталкивались. Спасибо за наводку
Sign up to leave a comment.

Articles