Russian Qt Forum
Ноябрь 01, 2024, 06:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Кто как борется с большим объемом данных  (Прочитано 5051 раз)
BuRn
Гость
« : Август 10, 2014, 18:29 »

Добрый день. Интересует кто как выкручивается из ситуации, когда репитор к примеру имеет модель из 400 000 элементов и ему нужно все это отрисовать. Встала проблема размещения огромного количества элементов на Flickable, склоняюсь к варианту отображения лишь 100, к примеру, и пересоздании модели с новыми элементами. А как выкручиваетесь вы ?
Записан
navrocky
Moderator
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #1 : Август 10, 2014, 18:57 »

ListView предназначен для этого. Он создает элементы только видимые на экране.
Записан

Гугль в помощь
BuRn
Гость
« Ответ #2 : Август 12, 2014, 22:57 »

ListView предназначен для этого. Он создает элементы только видимые на экране.
5.3 Вы его пробовали хотя бы на 1000 элементах ?
Записан
navrocky
Moderator
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #3 : Август 13, 2014, 08:54 »

ListView предназначен для этого. Он создает элементы только видимые на экране.
5.3 Вы его пробовали хотя бы на 1000 элементах ?

Этим вопросом прямо меня смутили. В доке эта ситуация отдельно расписана:

Цитировать
The Repeater type creates all of its delegate items when the repeater is first created. This can be inefficient if there are a large number of delegate items and not all of the items are required to be visible at the same time. If this is the case, consider using other view types like ListView (which only creates delegate items when they are scrolled into view) or use the Dynamic Object Creation methods to create items as they are required.

Вот проверка, ваши 400 000 элементов плавно скроллируются как и положено:
Код
Javascript
import QtQuick 2.2
 
Rectangle {
   width: 360
   height: 360
   focus: true
   Keys.onPressed: {
       switch (event.key) {
       case Qt.Key_Home:
           listView.contentY = 0;
           break;
       case Qt.Key_End:
           listView.contentY = listView.contentHeight - listView.height
           break;
       }
   }
 
   ListView {
       id: listView
       anchors.fill: parent
       model: 400000
       delegate: Rectangle {
           width: listView.width
           height: text.implicitHeight + 20 + (index % 5 == 0 ? 30 : 0)
           color: index % 2 == 0 ? "white" : "lightGray"
           Text {
               id: text
               anchors.fill: parent
               horizontalAlignment: Text.AlignHCenter
               verticalAlignment: Text.AlignVCenter
               text: index + " of " + listView.count
           }
       }
   }
}
Записан

Гугль в помощь
BuRn
Гость
« Ответ #4 : Август 13, 2014, 23:36 »

Все бы хорошо, а попробуйте теперь переделать его так, вставить внутрь репитор, который будет создавать объекты, репитор по модели из 100+к элементов, не просто квадратов , а что - то посерьезнее, словите креш
Записан
navrocky
Moderator
Гипер активный житель
*****
Offline Offline

Сообщений: 817


Погроммист


Просмотр профиля
« Ответ #5 : Август 14, 2014, 08:24 »

Все бы хорошо, а попробуйте теперь переделать его так, вставить внутрь репитор, который будет создавать объекты, репитор по модели из 100+к элементов, не просто квадратов , а что - то посерьезнее, словите креш
Я не понимаю, зачем вам сдался этот Repeater, он явно же не расчитан на большое количество элементов, т.к. сразу все создает.
Если надо ListView внутри итема в ListView - не проблема, это работает.
Записан

Гугль в помощь
BuRn
Гость
« Ответ #6 : Август 14, 2014, 20:05 »

Все бы хорошо, а попробуйте теперь переделать его так, вставить внутрь репитор, который будет создавать объекты, репитор по модели из 100+к элементов, не просто квадратов , а что - то посерьезнее, словите креш
Я не понимаю, зачем вам сдался этот Repeater, он явно же не расчитан на большое количество элементов, т.к. сразу все создает.
Если надо ListView внутри итема в ListView - не проблема, это работает.
В том то и проблема что нужен скроллвью, что в нем будет не важно, важно что бы оно все листалось, а листаться оно будет если создадутся все эелементы, для этого репитор и нужен
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #7 : Август 14, 2014, 20:13 »

Все бы хорошо, а попробуйте теперь переделать его так, вставить внутрь репитор, который будет создавать объекты, репитор по модели из 100+к элементов, не просто квадратов , а что - то посерьезнее, словите креш
Я не понимаю, зачем вам сдался этот Repeater, он явно же не расчитан на большое количество элементов, т.к. сразу все создает.
Если надо ListView внутри итема в ListView - не проблема, это работает.
В том то и проблема что нужен скроллвью, что в нем будет не важно, важно что бы оно все листалось, а листаться оно будет если создадутся все эелементы, для этого репитор и нужен

Создать элементы можно через модель Подмигивающий
Записан

BuRn
Гость
« Ответ #8 : Август 14, 2014, 20:47 »

Все бы хорошо, а попробуйте теперь переделать его так, вставить внутрь репитор, который будет создавать объекты, репитор по модели из 100+к элементов, не просто квадратов , а что - то посерьезнее, словите креш
Я не понимаю, зачем вам сдался этот Repeater, он явно же не расчитан на большое количество элементов, т.к. сразу все создает.
Если надо ListView внутри итема в ListView - не проблема, это работает.
В том то и проблема что нужен скроллвью, что в нем будет не важно, важно что бы оно все листалось, а листаться оно будет если создадутся все эелементы, для этого репитор и нужен

Создать элементы можно через модель Подмигивающий
через какую модель ? о чем вы ? весь скролл строится через модель, репитор перебирает элементы этой модели по описанному делегату и пихает его в скролл вью
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #9 : Август 14, 2014, 23:15 »

Все бы хорошо, а попробуйте теперь переделать его так, вставить внутрь репитор, который будет создавать объекты, репитор по модели из 100+к элементов, не просто квадратов , а что - то посерьезнее, словите креш
Я не понимаю, зачем вам сдался этот Repeater, он явно же не расчитан на большое количество элементов, т.к. сразу все создает.
Если надо ListView внутри итема в ListView - не проблема, это работает.
В том то и проблема что нужен скроллвью, что в нем будет не важно, важно что бы оно все листалось, а листаться оно будет если создадутся все эелементы, для этого репитор и нужен

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

Например, создайте собственную модель с нужными Вам ролями, после отображайте в делегате как захотите Улыбающийся
https://github.com/gil9red/ListFiles -- сама модель написана на с++


И Вам уже ответили в чем причина торможения:
ListView предназначен для этого. Он создает элементы только видимые на экране.
5.3 Вы его пробовали хотя бы на 1000 элементах ?
...
Цитировать
The Repeater type creates all of its delegate items when the repeater is first created. This can be inefficient if there are a large number of delegate items and not all of the items are required to be visible at the same time. If this is the case, consider using other view types like ListView (which only creates delegate items when they are scrolled into view) or use the Dynamic Object Creation methods to create items as they are required.
...
Вот тут:
The Repeater type creates all of its delegate items when the repeater is first created. This can be inefficient if there are a large number of delegate items and not all of the items are required to be visible at the same time. If this is the case, consider using other view types like ListView (which only creates delegate items when they are scrolled into view) or use the Dynamic Object Creation methods to create items as they are required.

Update.
В https://github.com/gil9red/ListFiles, ради теста временно изменил (коммит не отправлял) код загрузки из xml на добавление всех файлов из корня диска, а также поставил счетчик на ограничение в 450к файлов, все очень шустро, без лагов скролило.
« Последнее редактирование: Август 15, 2014, 00:54 от gil9red » Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.13 секунд. Запросов: 23.