Поиск:

Ответ в темуСоздание новой темы Создание опроса
> QTreeWidget сохранить 
:(
    Опции темы
Maledictus
Дата 16.8.2010, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 99
Регистрация: 7.9.2008
Где: Республика Белару сь, Борисов

Репутация: нет
Всего: 1



Необходимо сохранить всю структуру QTreeWidget. Желательно в БД. Каким образом это можно сделать я не понимаю. В google не нашел решения проблемы. xml слабо подходит по причине возможность очень большого дерева и как следствие долгой загрузкой из xml 
PM MAIL ICQ Jabber   Вверх
_GRIN_
Дата 16.8.2010, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


одинокий падаван
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 18.11.2007
Где: Калуга

Репутация: 6
Всего: 7



Maledictus, может быть не совсем в тему, но ...
при больших объёмах данных лучше использовать QTreeView вместо QTreeWidget. Данные всё время хранить в БД, а с виджетом связвать их через модель - например QSqlTableModel.


--------------------
Дорогу осилит идущий
PM MAIL Skype   Вверх
ecspertiza
Дата 17.8.2010, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 4
Всего: 5



Например вот

http://www.rsdn.ru/article/db/Hierarchy.xml

но мне больше нравится и всегда использую вот этот вариант

http://web-notes.ru/2005/01/nested_sets/


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
SABROG
Дата 17.8.2010, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Для QTreeWidgetItem есть перегруженный оператор у QDataStream. В базе нужно создать таблицу с 3-мя колонками:

Код

Primary Key | Parent | BLOB


Затем пробегаемся рекурсивно по дереву используя QTreeWidgetItemIterator и заполняем таблицу.

Код

0 0 BLOB - итем с ключем 0, с родителем 0. То есть верхний (top level) элемент
1 1 BLOB - аналогично итем с ключем 1, который сам для себя родитель, а значит верхний элемент сестринский 0-лю.
2 0 BLOB - ребенок для итема с ключем 0
3 0 BLOB - второй ребенок для итема с ключем 0
4 2 BLOB - ребенок для итема 2 у которого родитель 0 (0->2->4)
5 2 BLOB - (0->2->5)


То есть это такое дерево:
Код

Parent (0)
    Child (2)
        Child(4)
        Child(5)
    Child (3)
Parent (1)


Через оператор QDataStream & operator<< ( QDataStream & out, const QTreeWidgetItem & item ) сериализуем каждый итем в QByteArray применяя в качестве устройства QBuffer. Как записывать BLOB данные в базу думаю разберешься.
Если в QTreeWidget больше одной колонки, то просто добавь дополнительные BLOB поля.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Maledictus
Дата 18.8.2010, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 99
Регистрация: 7.9.2008
Где: Республика Белару сь, Борисов

Репутация: нет
Всего: 1



Очень благодарен за помощь. Сейчас пробую через модели реализовать это дерево, и через них думаю сериализовать все дерево в QByteArray и запихнуть в базу эту последовательность байтов.
Если есть какие-либо нарекания на предложенный мной способ, прошу озвучить.
PM MAIL ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0665 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.