|
67 / 65 / 61
Регистрация: 11.11.2015
Сообщений: 395
|
||||||
TreeView и коллекция моего класса23.04.2017, 22:27. Показов 2763. Ответов 26
Метки нет (Все метки)
Добрый день. Предположим существует класс.
Я умею такое делать с коллекциями, содержащими стандартные типы. Но как сделать такое, с коллекцией собственных типов? Разумеется нужно, чтобы изменения в членах коллекции отражались и на форме. Заранее спасибо. Добавлено через 20 секунд Если можно, дайте небольшой пример.
0
|
||||||
| 23.04.2017, 22:27 | |
|
Ответы с готовыми решениями:
26
Коллекция объектов моего класса Музыкальная коллекция. taglib treeview QAbstractItemModel Коллекция узлов TreeView и передача аргументов |
|
67 / 65 / 61
Регистрация: 11.11.2015
Сообщений: 395
|
|
| 24.04.2017, 17:01 [ТС] | |
|
Спасибо. А без базы данных нельзя? Я с ними не работал.
Нужно просто с коллекцией собственных классов.
0
|
|
| 24.04.2017, 17:56 | |
|
lonelyhunter, 2 вложенных цикла?
0
|
|
|
|
|
| 24.04.2017, 19:43 | |
|
2
|
|
|
645 / 529 / 324
Регистрация: 20.05.2015
Сообщений: 1,471
|
|
| 24.04.2017, 22:46 | |
|
lonelyhunter, можно, главное создать список NodeItems, а затем передать его LoadFast.
Ниже пример с прикрученным к проекту классом.
0
|
|
|
18 / 18 / 8
Регистрация: 11.01.2016
Сообщений: 54
|
||||||
| 25.04.2017, 16:44 | ||||||
|
Студии под рукой нет, но как-то так.
Это просто чтобы отобразить коллекцию. При желании можно унаследовать свой класс от TreeNode и делать в нём вообще что угодно. Раньше я так и делал. Сейчас я просто пишу свой контрол, унаследовав его от TreeView и в нём заворачиваю вообще всё (так бы это выглядело таким образом MyTreeView1.ListOfMyclass = sList . А при изменении коллекции, чтобы не перерисовывать всё заного, можно, при желании, прикрутить событие, которое и изменит нужную ноду.
0
|
||||||
|
67 / 65 / 61
Регистрация: 11.11.2015
Сообщений: 395
|
|
| 25.04.2017, 17:09 [ТС] | |
|
Я тоже вручную отображал. Но дело в том, что данные для этой TreeView находятся в другом классе, в другом потоке. И соответственно, когда юзер должен удалить какой-то элемент, он должен удалить его и класса движка и из элемента интерфейса. В общем, мне есть над чем подумать.) Все это еще обновляется через равные периоды времени. И не дай бог, юзер захочет удалить именно в активный момент. Борюсь короче.
0
|
|
|
18 / 18 / 8
Регистрация: 11.01.2016
Сообщений: 54
|
||||||
| 25.04.2017, 18:11 | ||||||
|
В том, другом классе создаёте событие. В этом на него подписываетесь. Перерисовываете по событию. В этом классе обновление по времени не нужно. Если будут накладки, то вставляете механизм блокировки. В общем там всё просто.
И да, если желаете работать с данными другого класса/потока напрямую (что я бы не советовал), то я стал бы использовать не лист, а ConcurrentDictionary. Чудная вещь Добавлено через 26 минут Т.Е. Как-то так:
Добавлено через 2 минуты ПыСы Статичное событие лучше вообще вынести за все эти классы, и как дёргать так и реагировать на него откуда угодно. Очень удобно передавать между разными классами и потоками всё что угодно и когда угодно . Добавлено через 5 минут Для этого в MyEventArgs добавьте ещё кто посылает - и подпишитесь на него с обоих классов. и реагируйте соответственно. Добавлено через 13 минут ПыСыСы В другом случае можно создать 2 события, одно - когда изменились данный, второе, когда юзер хочет поменять данные. и подписаться на них соответственно из своих классов. В любом случае выполнятся всё будет в нужных потоках и накладок не будет (писал сервер/клиента на сокетах для нашего производства. Сервер хранил эталонную БД и о любых изменениях её сообщал БД клиентов. Классы работавшие с БД клиентов были отдельным потоком, сокет-клиентская часть так же, была отдельным потоком. Все данные перебрасывались событиями. Третий год работает - нареканий нету.)
0
|
||||||
|
67 / 65 / 61
Регистрация: 11.11.2015
Сообщений: 395
|
|
| 25.04.2017, 18:15 [ТС] | |
|
попробуй, спасибо)
0
|
|
|
18 / 18 / 8
Регистрация: 11.01.2016
Сообщений: 54
|
|||||||||||
| 25.04.2017, 18:21 | |||||||||||
|
Копировал у себя, тут, естественно, вместо
0
|
|||||||||||
|
645 / 529 / 324
Регистрация: 20.05.2015
Сообщений: 1,471
|
|||||||||||
| 26.04.2017, 06:22 | |||||||||||
|
Я тоже раньше грузил данные в цикле через
От мерцания и проблем с прорисовкой помогли эти строчки: Кликните здесь для просмотра всего текста
0
|
|||||||||||
|
645 / 529 / 324
Регистрация: 20.05.2015
Сообщений: 1,471
|
|
| 26.04.2017, 07:34 | |
|
Есть демка для сравнения
0
|
|
|
18 / 18 / 8
Регистрация: 11.01.2016
Сообщений: 54
|
|
| 26.04.2017, 13:56 | |
|
Двойная буфферизация конечно хорошая вещь, можно и прорисовку вообще отключать (SetVisibleCore) и показывать на фоне какую-нить красивую анимацию ожидания, вот только, когда я давненько пытался оптимизировать всю эту байду, толк от неё так и не увидел.
Глянул мельком, ИМХО, Ваш пример не вполне корректен. В первом случае Вы бегаете по нодам самого контрола, а во втором, вы загнали всё в Dictionary и бегаете уже по нему. Оттуда и выигрыш. если сделать не 5К а 50К, то бегая по тривью можно уже повеситься. Свангую, что если точно так же засуну данные в дататейбл - и буду бегать по ним, то у меня получится сравнимо с Вашими результатами. без всяких буфферизаций и прочего. Должно быть помедленней за счёт переноса в БД, но не на много - в зависимости от размера данных и с первым случаем конечно будет так же не сравнить. Чуть позже закину Ваш пример с третим тривью
0
|
|
|
18 / 18 / 8
Регистрация: 11.01.2016
Сообщений: 54
|
|
| 26.04.2017, 14:40 | |
|
Вот как-то так. Это вопрос тупо организации данных.
0
|
|
|
645 / 529 / 324
Регистрация: 20.05.2015
Сообщений: 1,471
|
||||
| 27.04.2017, 04:24 | ||||
|
Если с использовать буфферизацию мой может отобразится быстрее вашего хотя время покажет другое и даже если ваш будет заполняться первым. Хотя буфферизацию также легко можно прикрутить и к вашему варианту.
0
|
||||
|
645 / 529 / 324
Регистрация: 20.05.2015
Сообщений: 1,471
|
|
| 27.04.2017, 09:41 | |
|
0
|
|
|
18 / 18 / 8
Регистрация: 11.01.2016
Сообщений: 54
|
|
| 27.04.2017, 13:59 | |
|
О чём спорим не пойму. Как я и говорил, это вопрос организации данных и всё. Сам контрол вообще не причём и работает с одинаковой скоростью во всех трёх случаях и всякие шаманства с ним ничего практически не дают. В том, что Dictionary быстрее SQL запроса к DataTable (тем более на миллион записей), а "бегание" каждый чих по всем нодам медленней их обоих вместе взятых я сразу сказал, с этим никакой дурак спорить не будет. Вот Ваш миллион записей. Скорость самого тривью у Вас, если замерить, будет та же что и у меня.
Кликните здесь для просмотра всего текста
P.S. Немного лирики. По моему глубокому убеждению нет "плохих" или "хороших" вариантов. Есть только удовлетворяющие требованиям в данной конкретной ситуации. Вы описали стоящую перед Вами задачу и удовлетворившее решение. Когда я воследний раз имел дело с тривью, самое большое, что там в нём было - это разделы склада и категории инвентарных объектов, а их ну ни как не может быть больше тысячи - двух наименований. Зато вообще все данные (из которых вообще весь склад, включая и инвентарные единицы - хорошо если одна десятая общих данных) хранились в Mysql на сокет-сервере с которой кроссплатформенные(!) клиенты общались сериализованными(ProtoBuf) и зашифрованными обновлениями БД. Клиентские же БД - были sqlite-копиями серверной, зашифрованные по ключу устройства, получаемого с сервера после авторизации пользователя. Потому у меня в том проекте вообще все контролы были заточены под работу с БД. А из мелкого тривью вообще вышел монстр, который делал как GUI по фантазиям упыре.. тьфуты, начальства (моментальный поиск как поисковиках, фильтрацию нод, всякие DragNDrop-ы и прочий хлам), так же сам работал с локальной БД, предоставляя любые, даже малосвязанную с ним данные другим классам, сам обращался с классом сокет-клиента, по поводу внесения изменения связанных с ним данных и т.д. ( если что, уровень абстракции был достаточно высоким). Когда на pc-клиенте пара сотен не особо связанных между собой форм, не знаю как кому, но мне проще такие вещи делать блоками и потом их тупо уже расставлять. По моему, был он не особо быстрым, но никто на тормоза и затыки никогда не жаловался. Про то что вышло из Датагрида - вот он как раз был одним из основных контролов, даже говорить не буду.
0
|
|
|
176 / 124 / 49
Регистрация: 30.11.2012
Сообщений: 1,330
|
|
| 10.10.2020, 22:26 | |
|
Storm23, последовал твоему совету и попробовал FastTree. Но что-то не могу понять как там получать Node под курсором? Свойства HitTest там нет, GetChildAtPoint возвращает null.
0
|
|
|
|
||||||||||||
| 10.10.2020, 23:57 | ||||||||||||
1
|
||||||||||||
| 10.10.2020, 23:57 | |
|
Помогаю со студенческими работами здесь
20
Коллекция объектов одного класса в экземпляре другого класса Коллекция созданная из класса в коллекции из класса Коллекция их обобщенного класса Сериализация в XML (коллекция внутри класса) Список моего класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс.
Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
|
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа.
В качестве фильтра для отбора служит предопределенное значение перечислений.
Процедура. . .
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|