Russian Qt Forum
Ноябрь 27, 2024, 13:45
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Виртуальный QListView
Страниц:
1
[
2
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Виртуальный QListView (Прочитано 24971 раз)
IUnknown
Гость
Виртуальный QListView
«
Ответ #15 :
Май 11, 2005, 20:52 »
Мне действительно очеь надо реализовать виртуальный список под Unix и я остановил свой выбор на Qt, но так как с помощью этой библиотеки полноценной виртуальности реализовать не представляется возможным, может кто посоветует другую библиотеку где это делается без проблем, а то срочно нужно портировать виндосную прогу под FreeBSD.
Записан
Kostya.
Гость
Виртуальный QListView
«
Ответ #16 :
Май 12, 2005, 09:02 »
Цитата: "ANM"
Потому что sizeof(QListViewItem) = 44, слишком дорого для одной записи. А LISTVIEW на самом деле не хранит никакой информации записях. Объясню почему:
Цитировать
virtual list-view control maintains very little item information itself. Except for the item selection and focus information, the owner of the control must manage all item information.
Размер информации о фокусе это sizeof(int), только одна запись имеет фокус. Информация о выбранных пользователем записях имеет динамический изменяющийся размер,и если нет выбранных записей то и размер равен 0. Как это сделано? Очень просто - связанный список например.
Итог: QListView обязательно расходует 44 байта на каждую запись, LISTVIEW может вообще расходовать 0 байт на запись если одновременно разрешено выбирать только одну запись.
Я просто взял в тупую сделал sizeof(LVITEM), у меня получилось 40. Согласитесь что разница не большая.
Т.е. CListView обязательно расходует 40 байт на запись.
Почему вы фразу "maintains very little item information " переводите как "вообще не расходует"?
То IUnknown: Что вы понимаете под полноценным виртуальным списком?
Записан
ANM
Гость
Виртуальный QListView
«
Ответ #17 :
Май 13, 2005, 10:17 »
Дело в том, что LVITEM не хранится в LISTVIEW, это структура просто часть интерфейса. Поэтому sizeof(LVITEM) может быть любым, даже большим чем sizeof(QListViewItem).
В подтверждении моих слов я нашел пример: LISTVIEW отображающий 100 000 000 записей, после запуска программа потребляет всего 408 Кб оперативной памяти. Причем я пробовал изменять кол-во записей от 100 000 до 100 000 000, объем потребляемой памяти не менялся.
Программу можно взять
здесь
(исходные тексты + исполняемый файл).
Сможете сделать такой же пример, используя QListView? :wink:
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Виртуальный QListView
«
Ответ #18 :
Май 13, 2005, 13:41 »
Может, контест проведем?
))))))))))))))
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Kostya.
Гость
Виртуальный QListView
«
Ответ #19 :
Май 13, 2005, 14:15 »
Цитата: "ANM"
Дело в том, что LVITEM не хранится в LISTVIEW, это структура просто часть интерфейса. Поэтому sizeof(LVITEM) может быть любым, даже большим чем sizeof(QListViewItem).
В принципе конечно, возможно
Цитата: "ANM"
В подтверждении моих слов я нашел пример: LISTVIEW отображающий 100 000 000 записей, после запуска программа потребляет всего 408 Кб оперативной памяти. Причем я пробовал изменять кол-во записей от 100 000 до 100 000 000, объем потребляемой памяти не менялся.
Программу можно взять
здесь
(исходные тексты + исполняемый файл).
Сможете сделать такой же пример, используя QListView? :wink:
Это всеж таки немного не тот пример
. Т.к. число элементов известно заранее, что делать если число элементов не известно.
Кстати откуда взялась цифра 406К. LISTVIEW, НЕ хранит все 10 000 000 в памяти, а подгружает их из кэша. Поэтому он и занимает постоянно 406К, даже если используется 1 элемент.
А отсюда, вы не можете делать вывод, что он не хранить всю структуру LVITEM
Записан
ANM
Гость
Виртуальный QListView
«
Ответ #20 :
Май 13, 2005, 16:48 »
Цитировать
Это всеж таки немного не тот пример . Т.к. число элементов известно заранее, что делать если число элементов не известно.
Разговор шел именно о выводе известного кол-ва элементов. Вывод неизвестного кол-ва элементов наверное будет выглядеть чуть по другому, например явно не нужно отображать скроллбар.
Цитировать
Кстати откуда взялась цифра 406К. LISTVIEW, НЕ хранит все 10 000 000 в памяти, а подгружает их из кэша. Поэтому он и занимает постоянно 406К, даже если используется 1 элемент.
А отсюда, вы не можете делать вывод, что он не хранить всю структуру LVITEM
А это не одно и тоже? Разговор шел о том что QListView обязательно создает QListViewItem на каждый элемент находящийся в таблице. LISTVIEW имеет режим виртуального вывода при котором LISTVIEW не хранит никакой информации связанной с элементом, а всю информацию запрашивает у пользователя.
Можете привести аналогичный пример с QListView, чтобы показывал 100 000 000 записей?
Записан
Sergeich
Гость
Виртуальный QListView
«
Ответ #21 :
Май 13, 2005, 18:15 »
с QListView ниче такого не получится, но виртуальный список легко реализуется через QTable
Записан
Kostya.
Гость
Виртуальный QListView
«
Ответ #22 :
Май 14, 2005, 08:47 »
Цитата: "ANM"
Разговор шел именно о выводе известного кол-ва элементов. Вывод неизвестного кол-ва элементов наверное будет выглядеть чуть по другому, например явно не нужно отображать скроллбар.
Ну, значит упустил
Цитата: "ANM"
Цитировать
Кстати откуда взялась цифра 406К. LISTVIEW, НЕ хранит все 10 000 000 в памяти, а подгружает их из кэша. Поэтому он и занимает постоянно 406К, даже если используется 1 элемент.
А отсюда, вы не можете делать вывод, что он не хранить всю структуру LVITEM
А это не одно и тоже? Разговор шел о том что QListView обязательно создает QListViewItem на каждый элемент находящийся в таблице. LISTVIEW имеет режим виртуального вывода при котором LISTVIEW не хранит никакой информации связанной с элементом, а всю информацию запрашивает у пользователя.
Можете привести аналогичный пример с QListView, чтобы показывал 100 000 000 записей?
Да, QListView, при неизвестном количестве элементов, будет создавать на каждый элемент QListViewItem, впрочем как и CListCtrl!
Для реализации списка с известным числом элементов, есть QTable.
Я забыл, в MFC есть класс наподобие QTable?
Если нет, то можно переобозвать QTable в QListView и повторить ваш пример с CListCtrl
Записан
ANM
Гость
Виртуальный QListView
«
Ответ #23 :
Май 14, 2005, 10:03 »
Цитата: "Sergeich"
с QListView ниче такого не получится, но виртуальный список легко реализуется через QTable
Да можно, но какой ценой? Заставляют самостоятельно отрисовывать элементы. :x Нет бы просто данные запрашивать.
Цитата: "Kostya."
Да, QListView, при неизвестном количестве элементов, будет создавать на каждый элемент QListViewItem, впрочем как и CListCtrl!
Да, известно кол-во элементов, просто оно очень большое.
CListCtrl это обертка над LISTVIEW, так что все что умеет LISTVIEW умеет и CListCtrl.
Я кстати прочитал что в принципе можно использовать и LISTVIEW в QT. Сделать C++ обертку (наследника от QWidget) чтоб интерфейс нормальный был, и назвать это WListView :lol:
Записан
Kostya.
Гость
Виртуальный QListView
«
Ответ #24 :
Май 14, 2005, 10:33 »
Цитата: "ANM"
Я кстати прочитал что в принципе можно использовать и LISTVIEW в QT. Сделать C++ обертку (наследника от QWidget) чтоб интерфейс нормальный был, и назвать это WListView :lol:
Записан
Виталий
Гость
Виртуальный QListView
«
Ответ #25 :
Май 20, 2005, 22:06 »
Действительно, большие объемы данных можно выводить при помощи QTable. Я имел дело с классом, отнаследованным от QListView, в котором полностью подменялся (по моему) правый scroll bar. В общем работало. Я хочу предложить новое решение - Qt4. Там реализован паттерн Model/View. Это позволит с легкостью решить вашу проблему. Qt4 пока только в beta-версии.
Виталий
Записан
Const
Гость
Виртуальный QListView
«
Ответ #26 :
Май 24, 2005, 14:17 »
Цитата: "Виталий"
Я имел дело с классом, отнаследованным от QListView, в котором полностью подменялся (по моему) правый scroll bar.
А можно по подробнее, как это все было устроено? :oops:
Записан
Страниц:
1
[
2
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...