Russian Qt Forum
Ноябрь 24, 2024, 09:10 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: хранение QStandardItem после выхода из программы  (Прочитано 6099 раз)
izoomer
Гость
« : Январь 18, 2007, 10:50 »

а можно ли каким то образом хранить QModelIndex или QStandardItem после выхода из программы ?
У меня вот в процессе работы программы формируется большая модель с несколькими UserRole в каждой строке. Хотелось бы хранить все данные в ролях при выходе из прграммы и востанавливать их при следующем запуске . Как решить такую задачу ?
Записан
nova
Гость
« Ответ #1 : Январь 18, 2007, 11:23 »

Попробуй переопределить в саоем класе наследнике QStandardItem функцию write()  для записи своих данных и read() соответственно для чтения. и в модели сделай read/write функции.
Записан
izoomer
Гость
« Ответ #2 : Январь 18, 2007, 18:30 »

брррр .... не понял
Записан
Lion
Гость
« Ответ #3 : Январь 18, 2007, 23:39 »

Сохранение и востановление данных должно быть реализовано в модели.
Записан
nova
Гость
« Ответ #4 : Январь 19, 2007, 11:23 »

А если быть более точным, то в модели реализуеш сохранение итемов, а в итемах собственно данных.
Записан
izoomer
Гость
« Ответ #5 : Январь 19, 2007, 19:55 »

так в том то и дело ... у меня етсь QList<QStandardITem *> llistItem,содержащий эти самые QStandardItem , и нужно после выхода изх программы сохранить где то этот QList
Записан
nova
Гость
« Ответ #6 : Январь 19, 2007, 23:33 »

Ну тады все просто
Для записи:
Код:

QFile file("file.dat");
 file.open(QIODevice::WriteOnly);
 QDataStream out(&file);
 out << llistItem;

Для чтения:
Код:

QFile file("file.dat");
 file.open(QIODevice::ReadOnly);
 QDataStream in(&file);
 in >> llistItem;


Ой Улыбающийся правда с QList<QStandardITem *> может не сработать, но с QList<QStandardITem> сработает точно Подмигивающий
Записан
Lion
Гость
« Ответ #7 : Январь 22, 2007, 23:07 »

Цитата: "izoomer"
так в том то и дело ... у меня етсь QList<QStandardITem *> llistItem,содержащий эти самые QStandardItem , и нужно после выхода изх программы сохранить где то этот QList

Сохранять надо не сам список, а данные каждго итема, которые можно получить функцией data, а также родительские отношения. Очень удобен в данном случае xml формат.
Записан
izoomer
Гость
« Ответ #8 : Январь 23, 2007, 11:18 »

думаю как раз вариант от nova более приемлим (хотя было бы лучше если бы можно было сохранять указатели), поясню мою задачу.
Получается что при старте программы создается модель (все роли пустые), в процессе работы модифицируем различные Role у итемов и одновременно строки с модифицированыеми Role храним в вушеупоминаемом списке. Так вот, при следующей загрузке приложения , как ипологается строится модель, но теперь нужно востановить из списка те строки, роли которых уже были модифицированы, и в предыдущий запуск были занесены в список.
А строк до 10-20 тыс.
Записан
nova
Гость
« Ответ #9 : Январь 23, 2007, 20:18 »

От сохранения указателей толку мало Улыбающийся
Сохранять надо данные на которые эти указатели указывают!
У QStandardItem есть переопределенные функции:
Код:

QDataStream & operator<< ( QDataStream & out, const QStandardItem & item )
QDataStream & operator>> ( QDataStream & in, QStandardItem & item )

значит для них можно написать:
Код:

dsOut << item;
dsIn >> item;

При этом в поток будут записаны/считаны ВСЕ данные из этих классов.
Если у тебя есть QList<QStandardITem> то можно написать просто:
Код:

dsOut << list;
dsIn >> list;

и все бедет писатся/читатся так как операторы  << >>  переопределены для списка( смотри описание QList и комент к операторам ).
Для QList<*QStandardITem> нужно сделать свои реализации операторов << >> и все Улыбающийся

И вообче учите матчасть. В смысле C++
Записан
izoomer
Гость
« Ответ #10 : Январь 27, 2007, 08:56 »

Цитата: "nova"
И вообче учите матчасть. В смысле C++


Та вот и вникаю по ходу написания кода ...

Спаисбо за советы по моей задаче.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.108 секунд. Запросов: 21.