Russian Qt Forum
Июля 01, 2025, 00:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: хранение QStandardItem после выхода из программы  (Прочитано 6276 раз)
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.023 секунд. Запросов: 18.