Название: QSettings Отправлено: break от Декабрь 22, 2008, 22:48 Использую QSettings для нескольких программ - т.е. они хранят натсройки в одном файле.
Система Ubuntu 8.04/ Заметил такую вещь - одна программа читает текстовое поле в файле настроек (в моем случае INI файл) выглядит так: Text_1="Some Text" другая программа сохраняет настройки своего окошка (геометрию) - выглядит так: Geometry=@ByteArray(\x1\xd9\xd0\xcb\0\x1\0\0\0\0\0\xd9\0\0\0M\0\0\x4\x13\0\0\x2\xac\0\0\0\xdd\0\0\0Q\0\0\x3\xfa\0\0\x2\xa8\0\0\0\0\0\0) Послето того как вторая пересохраняет параметры своего окошка - текст текстового поля становится нечитаем - что то типа такого Text_1=\xd0\xad\xd0\x94\x39\xd0\x9c - видимо его тоже пересохраняет как ByteArray - как сделать чтобы этого не происходило (т.к. человеческим глазом там ничего потом не разобрать - а это требуется) Название: Re: QSettings Отправлено: break от Декабрь 23, 2008, 00:09 Нашел в ассистенте такой код:
bool readXmlFile(QIODevice &device, QSettings::SettingsMap &map); bool writeXmlFile(QIODevice &device, const QSettings::SettingsMap &map); Код
вроде это адаптация QSettings для работы с XML файлами - нигде не могу найти и не могу понять как реализовывать функции: bool readXmlFile(QIODevice &device, QSettings::SettingsMap &map); bool writeXmlFile(QIODevice &device, const QSettings::SettingsMap &map); я получая управление в них не имею понятия ни о том какая настройка хочет прочитаться - и открытые устройства как Binary --- зачем? Дошел до этого т.к. понял что INI айл ублюдство в моем случае - оно становится таковым как только надо хранить вложенные таблицы в качестве настроек.... Название: Re: QSettings Отправлено: Rcus от Декабрь 23, 2008, 22:09 Судя по src/corelib/io/qsettings*.* это ограничение пользовательских форматов настроек (чтение/запись должны производиться разом). Чтобы реализовать свой xml формат настроек достаточно использовать QDomDocument::setContent для чтения и ::toByteArray для записи, а вот как вы будете хранить структуру настроек, разные типы (в том числе пользовательские) уже зависит целиком от вашей фантазии.
Название: Re: QSettings Отправлено: break от Январь 12, 2009, 21:15 с QtXml работаю и все ОК - все что совсем невмоготу храню в XML - но все же хочется добиться УДОБОЧИТАЕМОГО ДЛЯ ЧЕЛОВЕКА хранения данных через QSettings - в виндовс когда оно хранится в реестре - то все ок т.к. древовидная структура, но в Linux эти ini - не вариант для параметров большой вложенности...
В общем мне не до конца понятно как переопределять функции bool readXmlFile(QIODevice &device, QSettings::SettingsMap &map); bool writeXmlFile(QIODevice &device, const QSettings::SettingsMap &map); Получается что все настройки должны прочитаться разом когда объект QSettings создастся и записаться разом когда сохраниться - метож sync() ?? Если да то при определении этих функций в момент записи "QSettings::SettingsMap &map" будет содержать все необходимые параметры для записи а в случае определения readXmlFile я наоборот доложен заполнить его? Еще интересно в каком месте системы создасться XML файл кот. я буду писать - опять же Я сам все это определяю? Название: Re: QSettings Отправлено: ритт от Январь 12, 2009, 21:36 на все вопрос - "да" :)
QSettings::SettingsMap (это QVariantMap) - проблем с разбором и пониманием быть не должно... > в каком месте системы создасться XML файл имя(или полный путь/имя) укажешь сам при создании. альтернативно можешь указать дефолтовые пути для своего формата (QSettings::setPath(...)) Название: Re: QSettings Отправлено: vaprele07 от Январь 13, 2009, 03:50 сделал бы кто-нибудь хмл2склайт в би-деревьях и выложил бы это в гпл я бы был так счастлив ::)
по теме смотри: http://www.cloanto.com/specs/ini.html кодировка... все станет ясно почему... Название: Re: QSettings Отправлено: break от Январь 31, 2009, 19:06 Наконец то появилось время написал маленький класс для хранения чтения настроек через QSettings но через XML, вдруг кому пригодиться:
XmlSettings.h: Код: #include <QString> XmlSettings.cpp: Код:
Ограничение - нельзя использовать теги "table" и "size" в качестве "своих" атрибутов, чтобы компонент понял что в ноде таблица - тег "table" должен быть 1. Все строки такой табличной ноды должны иметь имя тега "row_1", "row_2" и т.д. - Это все важно при создание конфига человеком - при создание из программы все автоматически формируется как надо. Доступ к стандартному QSettings - через ф-ю settings() Поддерживается все что было в QSettings (вроде) Group/Array и т.д. Чтобы скомпилировался нужно опр-ть 2 функции appBaseName() - у меня возвращает имя запускаемого файла без расширения, dataPath() - путь к папке в которой хр-ся ресурсы программы (Б.Д. и т.д.). В целом должны пониматься вот такие xml: Код: <?xml version="1.0" encoding=""?> В конструкторе можно передовать имя файла настроек (с полным путем). |