Название: Получить собственные данные из QSettings Отправлено: 0...-5 от Январь 11, 2013, 10:20 Здравствуйте, у меня возникла такая проблема:
Я разработал некоторый класс для хранения данных, зарегистрировал его в мета-объектной системе макросом q_declare_metatype(), определил потоковые операторы <</>> и зарегистрировал их с помощью qRegisterMetaTypeStreamOperators(). После этого я попытался получить свой класс из объекта QSettings и заметил следующую вещь: вызов Код: MyClass c = qvariant_cast<MyClass>(settings.value("key")) Код: void QMetaType::destroy(int type, void *data) Код: QVariant value = settings.value("key"); В чем здесь дело? Название: Re: Получить собственные данные из QSettings Отправлено: gil9red от Январь 11, 2013, 23:01 Могу ошибаться, но разве QVariant не хранит просто указатель?
ведь вы в QVariant поместили ссылку/указатель(1), и ее извлекли - нормально, ведь данные на которые (1) указывала существуют... а QSettings производит чтение/запись в файл (реестр/ini-файл), и в него таким макаром просто запишете (1), а (1) просто набор байтов и когда будете с помощью QSettings вытаскивать (1) из файла может оказаться что (1) указывает хрен-знает-куда и программа падает ведь сами написали, какая вылезла ошибка, а именно ошибка сегментации, вики говорит, что это: "Ошибка сегментации (англ. Segmentation fault или сокращённо segfault) — ошибка программного обеспечения, возникающая при попытке обращения к недоступным для записи участкам памяти либо при попытке изменения памяти запрещённым способом." Название: Re: Получить собственные данные из QSettings Отправлено: gil9red от Январь 11, 2013, 23:07 Если ваш класс не имеет неограниченное количество значений, которые нужно записывать, то стоит в QSettings записывать именно это значения :)
если что, QSettings может и массивы записывать/считывать ;) Название: Re: Получить собственные данные из QSettings Отправлено: Igors от Январь 12, 2013, 01:38 то ошибка не возникает. Наверное тоже возникает, только позже, когда value выйдет за пределы видимости. Нужно проверить конструктор копирования для MyClassВ чем здесь дело? |