Russian Qt Forum
Мая 13, 2025, 23:08
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Дерево и плоский список
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Дерево и плоский список (Прочитано 3636 раз)
Vee Nee
Гость
Дерево и плоский список
«
:
Января 28, 2009, 11:32 »
Приветствую всех. Прошу помощи советом с организацией размещения данных, что-то приходящие мне в голову идеи кажутся мне некрасивыми. Реализую все на С++ + Qt 4.4.3, что, впрочем, особого значения не имеет. Вот что, собственно, имеем:
Массив объектов Client, в гуе он также отображен в QTableWidget
В каждом Client есть массив объектов Invoice, в гуе он также отображен в QTableWidget свой
С клиентами все понятно, GUI просит, скажем, отредактировать Client с индексом 5 - вытаскиваем из массива, редактируем, кладем обратно под тем же индексом. Только вместо массива я использую QList, но не думаю что это особо на что-то повлияет, так как проблема-то не с тем как с этими классами Qt работать и не с классами вообще. Но, получаем мы комманду с GUI о том, что нужно отредактировать счет (Invoice) с индексом скажем 10. Но ведь GUI видит счета как плоский список, а реально имеем дерево. Под индексом я подразумеваю собственно индекс элемента в массиве, ну в случае с GUI и QTableWidget это tableInvoices->currentRow().
Мне же, фактически, для того чтобы отредактировать счет, требуется знать не столько его индекс в плоском списке, сколько индекс клиента в массиве клиентов и индекс счета в массиве счетов этого клиента. Первой мыслью было вести массив размером с кол-во счетов в плоском списке, где по индексу счета в плоском списке можно было бы из этого массива вытащить индекс клиента в массиве клиентов и индекс счета в массиве счетов клиента. Но клиент может быть удален и тогда вся эта таблица отношений поедет - пропадет клиент с индексом 5, туда же отправятся все его счета - значит все индексы клиентов, которые были в массиве с индексом большим 5 сместятся на 1 позицию в сторону уменьшения индекса. Да, можно пробегаться по массиву соответствия индекса счета с клиентом и делать в них clientIndex--, что собственно мне и кажется кривым.
Прошу помочь советом - как организовать данные, их размещение более правильно, дабы на такие грабли не наступать и пройти более красивым путем или быть может есть весьма красивый способ решения проблемы при той же структуре данных. Чувствую где-то я сделал что-то очень не такили не в ту сторону смотрю.
Записан
Karl-Philipp
Гость
Re: Дерево и плоский список
«
Ответ #1 :
Января 28, 2009, 11:37 »
Vee Nee, а что если для поставленной задачи использовать базу данных?
Записан
ритт
Гость
Re: Дерево и плоский список
«
Ответ #2 :
Января 28, 2009, 11:44 »
мой совет - избавиться от QTableWidget в пользу QTableView (или QTreeView) + своей модели. вся работа с клиентами/счетами через модель - модель всегда знает какой индекс указывает на соотв.объект (и наоборот). для удобства можно реализовать item-based модель.
Записан
Vee Nee
Гость
Re: Дерево и плоский список
«
Ответ #3 :
Января 28, 2009, 12:49 »
terlan, использование БД в данном случае мне кажется перебором, так как по сути она будет только хранилищем. Идею понял, но хотелось бы обойтись без таких навороченных способов хранения.
Константин, да, спасибо, буду изучать эти QTableView, похоже что своя модель это то к чему нужно было идти в самом начале разработки. Надеюсь смогу за 2 дня осилить
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...