crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QSettings, QSettings запретить редактировать
fortero
  опции профиля:
сообщение 19.6.2011, 22:11
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 132
Регистрация: 4.12.2010
Пользователь №: 2242

Спасибо сказали: 0 раз(а)




Репутация:   0  


Есть вот такой код:
QSettings readSet(tr("fwconf.ini"), QSettings::IniFormat);
    readSet.setIniCodec("CP1251");
    readSet.beginGroup(idworm);
    
    sizWinX = readSet.value("minSizX", "").toInt();
    sizWinY = readSet.value("minSizY", "").toInt();
    for(int uio=1;!readSet.value(QString("namColWieTab%1").arg(uio), "").toString().isEmpty();uio++)
        titl << readSet.value(QString("namColWieTab%1").arg(uio), "").toString();
    for(int uio=1;!readSet.value(QString("proColWieTab%1").arg(uio), "").toString().isEmpty();uio++)
        propWin << readSet.value(QString("proColWieTab%1").arg(uio), "").toFloat();
    for(int uio=1;!readSet.value(QString("namColSqlTab%1").arg(uio), "").toString().isEmpty();uio++)
        listTabSql << readSet.value(QString("namColSqlTab%1").arg(uio), "").toString();
    tabNamSql.append(readSet.value("namSqlTab", "").toString());
    titlForms.append(readSet.value("addTit", "").toString());
    descForms.append(readSet.value("addDesc", "").toString());
    for(int uio=1;!readSet.value(QString("listLab%1").arg(uio), "").toString().isEmpty();uio++)
        listsLab << new QLabel(readSet.value(QString("listLab%1").arg(uio), "").toString());
    for(int uio=1;!readSet.value(QString("objNam%1").arg(uio), "").toString().isEmpty();uio++)
        objNam << readSet.value(QString("objNam%1").arg(uio), "").toString();
    for(int uio=1;!readSet.value(QString("validObj%1").arg(uio), "").toString().isEmpty();uio++)
        validObj << readSet.value(QString("validObj%1").arg(uio), "").toString();
    titlFormsEdit.append(readSet.value("editTitl", "").toString());
    descFormsEdit.append(readSet.value("editDesc", "").toString());
    for(int uio=1;!readSet.value(QString("findsNam%1").arg(uio), "").toString().isEmpty();uio++)
        findsPolNam << readSet.value(QString("findsNam%1").arg(uio), "").toString();
    for(int uio=1;!readSet.value(QString("findsObj%1").arg(uio), "").toString().isEmpty();uio++)
        findsObjNam << readSet.value(QString("findsObj%1").arg(uio), "").toString();
    readSet.endGroup();


Подскажите пожалуйста, как сделать, что бы при прочтении файла класс QSettings не редактировал ini файл оставлял его в первозданном состоянии, а то после каждого прочтения он удаляет пробелы между строками, кодировку переворачивает в какую то абра кодабру. Хоть и с кодеровками всё в порядке. Как ему запретить насильно, редактировать файл?
Спасибо за внимание!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
panter_dsd
  опции профиля:
сообщение 19.6.2011, 22:51
Сообщение #2


Жаждущий знаний
***

Группа: Участник
Сообщений: 254
Регистрация: 1.1.2009
Из: Санкт-Петербург
Пользователь №: 474

Спасибо сказали: 32 раз(а)




Репутация:   3  


Переопредели QSettings::WriteFunc.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
fortero
  опции профиля:
сообщение 19.6.2011, 22:58
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 132
Регистрация: 4.12.2010
Пользователь №: 2242

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(panter_dsd @ 19.6.2011, 22:51) *
Переопредели QSettings::WriteFunc.

Это как? Пример можно?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
panter_dsd
  опции профиля:
сообщение 20.6.2011, 7:13
Сообщение #4


Жаждущий знаний
***

Группа: Участник
Сообщений: 254
Регистрация: 1.1.2009
Из: Санкт-Петербург
Пользователь №: 474

Спасибо сказали: 32 раз(а)




Репутация:   3  


http://doc.qt.nokia.com/4.7/qsettings.html#registerFormat
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 22.6.2011, 13:18
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


у меня при чтении, НЕ записи, ничего не изменяется.

Цитата(fortero @ 20.6.2011, 1:11) *
readSet.setIniCodec("CP1251");
в Qt такая кодировка не известна. См. список тут
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
panter_dsd
  опции профиля:
сообщение 22.6.2011, 13:53
Сообщение #6


Жаждущий знаний
***

Группа: Участник
Сообщений: 254
Регистрация: 1.1.2009
Из: Санкт-Петербург
Пользователь №: 474

Спасибо сказали: 32 раз(а)




Репутация:   3  


Litkevich Yuriy, CP1251 - это алиас и Qt его отлично понимает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ufna
  опции профиля:
сообщение 22.6.2011, 17:43
Сообщение #7


Активный участник
***

Группа: Участник
Сообщений: 362
Регистрация: 24.5.2008
Из: Курган/СПб
Пользователь №: 182

Спасибо сказали: 29 раз(а)




Репутация:   5  


Цитата(Litkevich Yuriy @ 22.6.2011, 14:18) *
у меня при чтении, НЕ записи, ничего не изменяется.


+1
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 23.6.2011, 9:54
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(panter_dsd @ 22.6.2011, 16:53) *
CP1251 - это алиас и Qt его отлично понимает.
Если написать
QTextCodec::setCodecForTr(QTextCodec::CodecForName("CP1251"));
то с кодировкой будут проблемы, если же написать:
QTextCodec::setCodecForTr(QTextCodec::CodecForName("Windows-1251"));
то проблем нет.

П.С.
Обжёгся на Qt 4.3 с тех пор пишу только "официальное имя"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 21:27