Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ QSettings

Автор: fortero 19.6.2011, 22:11

Есть вот такой код:

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

Переопредели QSettings::WriteFunc.

Автор: fortero 19.6.2011, 22:58

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

Это как? Пример можно?

Автор: panter_dsd 20.6.2011, 7:13

http://doc.qt.nokia.com/4.7/qsettings.html#registerFormat

Автор: Litkevich Yuriy 22.6.2011, 13:18

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

Цитата(fortero @ 20.6.2011, 1:11) *
readSet.setIniCodec("CP1251");
в Qt такая кодировка не известна. См. список http://doc.crossplatform.ru/qt/4.7.x/qtextcodec.html#details

Автор: panter_dsd 22.6.2011, 13:53

Litkevich Yuriy, CP1251 - это алиас и Qt его отлично понимает.

Автор: ufna 22.6.2011, 17:43

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


+1

Автор: Litkevich Yuriy 23.6.2011, 9:54

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

П.С.
Обжёгся на Qt 4.3 с тех пор пишу только "официальное имя"

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)