Мне нужно использовать filepath в качестве имени раздела в INI-файле, и я пытаюсь сделать это так:
QSettings ini(iniPath, QSettings::IniFormat);
ini.beginGroup("C:\\Users\\Username\\Documents\\222.txt");
ini.setValue(attributeName, attributeValue);
...
ini.endGroup();
Затем я пытаюсь прочитать значения из этого раздела:
QSettings ini(iniPath, QSettings::IniFormat);
ini.beginGroup("C:\\Users\\Username\\Documents\\222.txt");
auto allKeys = ini.allKeys();
for (auto& key: allKeys)
{
QString val = ini.value(key);
...
}
ini.endGroup();
Но в выходном файле я вижу только «[C% 3AUsers% 5CUsername% 5CDocuments% 5C222.txt]» в качестве имени раздела. И самое главное, что QSettings не может найти этот раздел, когда читает ini-файл, переменная allKeys всегда пуста.
В чем может быть проблема? Благодарю.
Посмотрите на QSettings :: Format документация:
QSettings всегда обрабатывает обратную косую черту как специальный символ и не предоставляет API для чтения или записи таких записей.
использование QDIR :: fromNativeSeparators () для названия раздела. Когда вы читаете обратно, просто используйте путь как есть (все классы Qt поддерживают его) или преобразуйте его в стиль Windows с помощью QDIR :: toNativeSeparators ().
Это была моя ошибка. Код в моем вопросе немного упрощен. Код для написания и чтения находится в методах «сохранить» и «загрузить». Я чувствую себя довольно глупо 🙁 Проблема была в разнице между входными параметрами в методах «save» и «load». В методе «save» строка ввода была «C: \ Users \ Username \ Documents \ 222.txt» и в Метод «загрузки» это был «C: /Users/Username/Documents/222.txt», поэтому, когда я попытался прочитать настройки в методе «загрузки», QSettings не смог найти раздел.
Насколько я понимаю, QSettings экранирует специальные символы, такие как «\» с символом «%». И символ «/» QSettings использует для создания вложений. Поэтому я решил использовать пути типа «C: \ Users \ Имя пользователя \ Documents \ 222.txt» как есть. Работает нормально. Спасибо вам всем.