Sunday, 20.05.2012 13:20:54, power by dbRus   Русский | English

Блог сайта dbRus

Блог сайта dbRus

Россия, 603022, г. Нижний Новгород, ул. Студенческая, д.8. Официальная почта: info2@dbrus.ru. Телефон: (831) 715-41-25
dbRus CMS - Система управления сайтом
dbRus Project - Система управления проектами и работами
dbRus SEO - История ТИЦ и PR, учёт обратных ссылок
dbRus HCR - Интернет-магазин блюд + рецепты
BB Avto - Каталог автомобильных объявлений
BB Home - Каталог объявлений о недвижимости
Все веб-приложения dbRus Group
Веб-приложения BB Group
Хостинг
Разработка веб-приложений
Разработка сайтов
Разработка информационных систем
Обучение и консультации
Услуги BB Group
Компоненты dbRus Group
Веб-приложения
Услуги
Программные продукты
Группы разработчиков и компании
Введение
Этап 1 - Проектирование веб-приложения
Этап 2 - Создание таблиц базы данных веб-приложения
Этап 3 - Формирование структуры информационной системы
Этап 3 шаг 1 - Регистрация модуля и разделов
Этап 3 шаг 2 - Регистрация форм разделов
Этап 3 шаг 3 - Регистрация бизнес-объектов, настройка операций
Этап 4 - Разработка интерфейса информационной системы
Этап 4 шаг 1 - Разработка справочников и разделов в ручном режиме
Среда разработки Qt Creator
Хранение настроек программы. Работа с INI-файлами
Переменное количество аргументов в функциях
Прикрепление файлов к записям
Вставка изображений в статью, новость или пост блога
Как я работал на заводах
Главная
Разработка веб-приложений
Фреймворк Qt
Работа с dbRus CMS
Жизнь в каменных джунглях
dbRus - Веб платформа
Инструменты Администрирования
Веб-приложение dbRus CMS - Управление сайтом
Веб-приложение dbRus CPW - Проекты и работы
Веб-приложение dbRus HCR - Интернет-магазин блюд
Все статьи...
Сравнение текстов, алгоритмов без учёта пробелов, табуляции и переноса строк
UrlEncode и UrlDecode - кодирование и декодирование строки или текста
Транслитерация слов как в ЧПУ
Выпечка
Торты и пироженные
Вторые блюда
Рубрикатор
Установка db-клиента
Список всех веб-приложений
Веб-приложение "Интернет-магазин блюд +рецепты"
Веб-приложение "Каталог автомобильных объявлений"
Веб-приложение "Учёт ПО"
Прочее
Графики работ по проектам и направлениям
История проекта
Поддержка проекта
Контакты. Обратная связь
Гocтeвaя книгa
ГлавнаяНовостиПрайс-листы Блог Статьи Online-сервисы Демо DBRus Project ПоискКарта сайта
Блог
Реклама
БЛОГ » ФРЕЙМВОРК QT » ХРАНЕНИЕ НАСТРОЕК ПРОГРАММЫ. РАБОТА С INI-ФАЙЛАМИ
  чт 12 Май 2011  | Просмотров: менее 10
При переходе на Qt возник вопрос - как и в каком формате хранить настройки программы и локальную базу данных. Первое что предлагает Qt - использовать формат XML. Но это очень тяжёлый формат для того, что бы хранить какой-то простенький список настроек программы, в котором всего-то несколько секций. Также и для локальной БД он не очень-то удобен - слишком много потребуется не только преобразовывать, но и переделывать код с Delphi. Я бы вообще использовал формат JSON для хранения локальных данных (использую в веб-проектах как наименее ёмкий текстовый формат), но для него под Delphi не было подходящих готовых решений.
 
Теперь к делу. Есть в Qt такой класс - QSettings, который предназначен для работы с файлами настроек приложений, в т.ч. и с INI-файлами. Первое возникшая неприятность - это способ хранения русских символов - он почему-то сохраняет их только в UTF-8 в виде %CF%C0%D0%C0%CC%C5%D2%D0_1=\xc7\xed\xe0\xf7\xe5\xed\xe8\xe5 \xef\xe0\xf0\xe0\xec\xe5\xf2\xf0\xe0 1 (что есть слово "ПАРАМЕТР_1=Значение параметра 1"). Но считывает и распознаёт обратно правильно. Таким образом, о применении русских названий параметров можно забыть, т.к. это не эстетично. Второе - в Delphi можно было бы написать PARAMNAME=abcd;efg, ijk и значение параметра считывалось как и предполагалось - целиком всё после первого знака равно, в Qt же всё сложнее - что бы значение со знаками ";" и "," не обрезалось до ";" или вовсе не считалось (и такое было), значение округляется в двойные кавычки, т.е. PARAMNAME="abcd;efg,  ijk".
 
Порадоволо, что QSettings поддерживает субсекции (составные ключи), а также что можно работать относительно части заданного ключа, т.е. не писать весь путь полностью (beginGroup() и endGroup()).
 
Далее выложены примеры чтения и сохранения настроек приложения:
 
QSettings options(dirProg+"options.ini", QSettings::IniFormat); // Второй аргумент - тип файла настроек
options.beginGroup("main"); // Будем считывать параметры в секции main

// Работа со строками
QString currentlang = options.value("currentlang", "ru").toString();
langs_code = options.value("langs_code", "ru;en").toString().split(";");
for (int i = 0; i < langs_code.count(); i++) {
	if (langs_code.at(i) == currentlang) ui->cbLang->setCurrentIndex(i);
}
dbLogin = options.value("dblogin", "root").toString();
dbPW = options.value("dbpw", "password").toString();

// Считываем прошлое положение главного окна приложения и тут же применяем
mainWin->setGeometry(
	options.value("left", 200).toInt(),
	options.value("top", 250).toInt(),
	options.value("width", 800).toInt(),
	options.value("height", 600).toInt()
);
ui->cbIniNameWithTime->setChecked(options.value("ininamewithtime", 1).toBool());
ui->cbAutoConnectDB->setChecked(options.value("autoconnectdb", 0).toBool());
ui->cbAutoSave->setChecked(options.value("autosave", 0).toBool());
ui->cbNoMKU->setChecked(options.value("nohardware", 0).toBool());
ui->cbDebug->setChecked(options.value("debug", 0).toBool());
ui->edLogin->setText(dbLogin);
ui->edPW->setText(dbPW);
options.endGroup();
 
Пример сохранения настроек:
 
QSettings options(dirProg+"options.ini", QSettings::IniFormat);
options.beginGroup("main");
options.setValue("currentlang", langs_code.at(ui->cbLang->currentIndex()));
options.setValue("debug", ui->cbDebug->isChecked());
options.setValue("ininamewithtime", ui->cbIniNameWithTime->isChecked());
options.setValue("autoconnectdb", ui->cbAutoConnectDB->isChecked());
options.setValue("autosave", ui->cbAutoSave->isChecked());
options.setValue("nohardware", ui->cbNoMKU->isChecked());
options.setValue("dblogin", ui->edLogin->text());
options.setValue("dbpw", ui->edPW->text());
options.setValue("width", mainWin->width());
options.setValue("height", mainWin->height());
options.setValue("left", mainWin->geometry().left());
options.setValue("top", mainWin->geometry().top());
options.endGroup();
Updated: 2012-02-23 11:53:30
votevotevotevotevote (голосов 1)
<< Предыдущий пост | Следующий пост >>

Комментариев нет

Ваше имя*:

Код безопасности:
Форма входа
Наш опрос
Какими веб-сервисами хотели бы Вы воспользоваться?







Облако ключевых фраз
Для красивого отображения этого блока требуется Flash Player 9 или выше
Статистика

При поддержке