Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > QTreeWidget сохранить |
Автор: Maledictus 16.8.2010, 15:22 |
Необходимо сохранить всю структуру QTreeWidget. Желательно в БД. Каким образом это можно сделать я не понимаю. В google не нашел решения проблемы. xml слабо подходит по причине возможность очень большого дерева и как следствие долгой загрузкой из xml |
Автор: _GRIN_ 16.8.2010, 23:53 |
Maledictus, может быть не совсем в тему, но ... при больших объёмах данных лучше использовать QTreeView вместо QTreeWidget. Данные всё время хранить в БД, а с виджетом связвать их через модель - например QSqlTableModel. |
Автор: ecspertiza 17.8.2010, 08:13 |
Например вот http://www.rsdn.ru/article/db/Hierarchy.xml но мне больше нравится и всегда использую вот этот вариант http://web-notes.ru/2005/01/nested_sets/ |
Автор: SABROG 17.8.2010, 08:19 | ||||||
Для QTreeWidgetItem есть перегруженный оператор у QDataStream. В базе нужно создать таблицу с 3-мя колонками:
Затем пробегаемся рекурсивно по дереву используя QTreeWidgetItemIterator и заполняем таблицу.
То есть это такое дерево:
Через оператор QDataStream & operator<< ( QDataStream & out, const QTreeWidgetItem & item ) сериализуем каждый итем в QByteArray применяя в качестве устройства QBuffer. Как записывать BLOB данные в базу думаю разберешься. Если в QTreeWidget больше одной колонки, то просто добавь дополнительные BLOB поля. |
Автор: Maledictus 18.8.2010, 08:31 |
Очень благодарен за помощь. Сейчас пробую через модели реализовать это дерево, и через них думаю сериализовать все дерево в QByteArray и запихнуть в базу эту последовательность байтов. Если есть какие-либо нарекания на предложенный мной способ, прошу озвучить. |