Я пишу и читаю строковые и целочисленные значения, используя объект QSettings
с файловой поддержкой. Когда позже я пытаюсь прочитать значения из другого процесса, значения считываются как строки, а не как int.
Это код, который я использую для записи значений:
QSettings settings("TestQSettings.ini", QSettings::IniFormat);
settings.setValue("AAA",QString("111"));
settings.setValue("BBB",222);
Это созданный файл:
[General]
AAA=111
BBB=222
Это код, который я использую для чтения значений:
QVariant qvar = settings.value("AAA");
std::cout << "AAA type " << qvar.type() << std::endl;
qvar = settings.value("BBB");
std::cout << "BBB type " << qvar.type() << std::endl;
Если я запускаю этот код из того же процесса:
AAA type 10
BBB type 2
Если я запускаю этот код из другого процесса:
AAA type 10
BBB type 10
Я знаю, что можно преобразовать типы после того, как они были прочитаны. К сожалению, это решение потребует изменения устаревшего кроссплатформенного кода Windows, который я предпочитаю не изменять, например, несколько вызовов RegQueryValueEx()
.
Можно ли хранить и читать информацию о типе для строк и целых чисел?
Например, строки будут иметь кавычки ""
, а целые числа — нет:
[General]
AAA="111"
BBB=222
Эта проблема присутствует как в Qt 4, так и в Qt 5 в Linux.
.ini
не хранят информацию о типе, поэтому, если вопрос заключается в том, как сделать так, чтобы файл.ini
сохранял тип, я боюсь, что ответ будет таков: вы этого не сделаете. - person Angew is no longer proud of SO   schedule 14.10.2013