qsettings разные результаты - PullRequest
       5

qsettings разные результаты

3 голосов
/ 18 февраля 2010

Я использую QSettings, чтобы попытаться выяснить, является ли INI действительным. (Используя status () для проверки) Я сделал целенаправленный неверный INI-файл и загрузил его. При первом вызове кода он возвращает неверный, но каждый раз после этого он возвращает действительный. Это ошибка в моем коде?

Ответы [ 2 ]

1 голос
/ 19 февраля 2010

Это ошибка Qt , вызванная некоторым глобальным состоянием. Обратите внимание, что разница в результатах происходит независимо от того, вызываете ли вы delete для вашего объекта QSettings, что вам и нужно. Вот краткое описание того, что происходит при первом запуске:

  1. Код результата установлен на NoError.
  2. Глобальный кеш проверяется, чтобы увидеть, присутствует ли ваш файл
  3. Ваш файл отсутствует в первый раз, поэтому он анализируется в qsettings.cpp строке 1530 (Qt-4.6.2)
  4. Анализ результатов приводит к ошибке, и код результата установлен (см. qsettings.cpp строка 1552).
  5. Код результата ошибки возвращается.

И второй прогон отличается:

  1. Код результата установлен на NoError.
  2. Глобальный кеш проверен, ваш файл присутствует.
  3. Размер файла и отметка времени проверяются на предмет изменения файла (см. qsettings.cpp строка 1424).
  4. Возвращается код результата, который равен NoError - файл, как предполагалось, был проанализирован правильно.
0 голосов
/ 19 февраля 2010

Проверив свой код, вам нужно удалить объект файла перед возвратом.

Кроме того, ваш код использует QSettings::QSettings(fileName, format) c'tor, чтобы открыть INI-файл. Этот вызов заканчивается в функции QConfFile::fromName (реализовано в qsettings.cpp ). Когда я его читаю (есть несколько макросов и таких, которые я решил не выполнять), файл не открывается повторно, если файл уже открыт (т.е. вы не удаляли объект с последнего раза). Таким образом, состояние будет в порядке во второй раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...