Russian Qt Forum

Qt => Общие вопросы => Тема начата: izoomer от Январь 18, 2007, 10:50



Название: хранение QStandardItem после выхода из программы
Отправлено: izoomer от Январь 18, 2007, 10:50
а можно ли каким то образом хранить QModelIndex или QStandardItem после выхода из программы ?
У меня вот в процессе работы программы формируется большая модель с несколькими UserRole в каждой строке. Хотелось бы хранить все данные в ролях при выходе из прграммы и востанавливать их при следующем запуске . Как решить такую задачу ?


Название: хранение QStandardItem после выхода из программы
Отправлено: nova от Январь 18, 2007, 11:23
Попробуй переопределить в саоем класе наследнике QStandardItem функцию write()  для записи своих данных и read() соответственно для чтения. и в модели сделай read/write функции.


Название: хранение QStandardItem после выхода из программы
Отправлено: izoomer от Январь 18, 2007, 18:30
брррр .... не понял


Название: хранение QStandardItem после выхода из программы
Отправлено: Lion от Январь 18, 2007, 23:39
Сохранение и востановление данных должно быть реализовано в модели.


Название: хранение QStandardItem после выхода из программы
Отправлено: nova от Январь 19, 2007, 11:23
А если быть более точным, то в модели реализуеш сохранение итемов, а в итемах собственно данных.


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


Название: хранение QStandardItem после выхода из программы
Отправлено: nova от Январь 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> сработает точно ;)


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

Сохранять надо не сам список, а данные каждго итема, которые можно получить функцией data, а также родительские отношения. Очень удобен в данном случае xml формат.


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


Название: хранение QStandardItem после выхода из программы
Отправлено: nova от Январь 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++


Название: хранение QStandardItem после выхода из программы
Отправлено: izoomer от Январь 27, 2007, 08:56
Цитата: "nova"
И вообче учите матчасть. В смысле C++


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

Спаисбо за советы по моей задаче.