Сохранить (уже существующий) QSetting в INI-файл - PullRequest
5 голосов
/ 19 января 2012

Я хочу сохранить уже существующий QSettings объект в некоторый INI-файл для резервного копирования.

QSettings происходит из глобальных настроек приложения, т.е.это может быть реестр, INI-файл и т.д.метод в класс Params:

class Params
{
    void saveTo (QSettings & s)
    {
        s.setValue (...);
    }
};

int main (...)
{
    Params p;
    p.loadGlobal ();
    QSettings bak ("myparams.ini", ...);
    p.saveTo (bak);
}

Но я ищу решение без изменения класса Params.

Ответы [ 2 ]

9 голосов
/ 19 января 2012

Ну, нет, QT не поддерживает это напрямую.Я думаю, что ваш лучший выбор - написать вспомогательный класс ... что-то вроде:

void copySettings( QSettings &dst, QSettings &src )
{
    QStringList keys = src.allKeys();
    for( QStringList::iterator i = keys.begin(); i != keys.end(); i++ )
    {
        dst.setValue( *i, src.value( *i ) );
    }
}
0 голосов
/ 20 января 2012

Я думаю, что есть 2 вопроса:

  • QSettings не имеет конструктора копирования или оператора присваивания (о котором я знаю), поэтому вам, вероятно, придется написать свою собственную копию, используя allKeys () .
  • Вы не можете сохранить QSettings в произвольном файле, но вы можете установить путь, используемый для определенного формата и области, используя статический метод QSettings :: setPath () . Обратите внимание, что вам нужно сделать это до создания вашего резервного объекта QSettings (и вы должны использовать формат IniFormat ).

Если вы в порядке, не имея полного контроля над полученным путем, этого должно быть достаточно. Если нет, то вы все равно можете сделать это, затем получить имя файла с помощью fileName () и использовать системный вызов, чтобы скопировать / переместить файл в нужное конечное местоположение.

...