2010-02-18 69 views
3

我正在使用QSettings試圖找出INI是否有效(使用status()來檢查)我製作了一個有目的的無效INI文件並加載它。第一次調用代碼時,它返回無效,但每次都返回有效。這是我的代碼中的錯誤?設置不同的結果

+2

你能粘貼你的代碼和文件嗎? – 2010-02-18 20:31:17

+0

是...這是方法: http://pastebin.ca/1802323 和文件是: http://pastebin.ca/1802322 – eyecreate 2010-02-19 03:39:40

回答

0

檢查你的代碼,你需要在返回之前刪除文件對象。

除此之外,您的代碼使用QSettings::QSettings(fileName, format) c'tor打開ini文件。該呼叫以功能QConfFile::fromName結束(在qsettings.cpp中執行)。當我讀到它時(有幾個宏以及我決定不遵循),如果文件已經打開(即上次沒有刪除該對象),則文件不會重新打開。因此,狀態將在第二時間確定。

1

這是一個Qt bug由一些全局狀態引起的。請注意,不管您是否在您的QSettings對象上調用delete,都應該發生結果差異。下面簡要總結了第一次運行會發生什麼情況:

  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 - 文件被認爲已被正確解析。