C++ q设置不同的结果

C++ q设置不同的结果,c++,qt,C++,Qt,我正在使用QSettings尝试确定INI是否有效。(使用status()进行检查)我故意创建了一个无效的INI文件并将其加载。第一次调用代码时,它返回invalid,但每次调用之后,它都返回valid。这是我的代码中的错误吗?检查了您的代码,您需要在返回之前删除文件对象 除此之外,您的代码使用QSettings::QSettings(文件名、格式)c'tor打开ini文件。该调用以函数QConfFile::fromName结束(在中实现)。正如我所读到的(有一些宏,因此我决定不遵循),如果文件

我正在使用QSettings尝试确定INI是否有效。(使用status()进行检查)我故意创建了一个无效的INI文件并将其加载。第一次调用代码时,它返回invalid,但每次调用之后,它都返回valid。这是我的代码中的错误吗?

检查了您的代码,您需要在返回之前删除文件对象


除此之外,您的代码使用
QSettings::QSettings(文件名、格式)
c'tor打开ini文件。该调用以函数
QConfFile::fromName
结束(在中实现)。正如我所读到的(有一些宏,因此我决定不遵循),如果文件已经打开,则不会重新打开该文件(即,自上次以来,您没有删除该对象)。因此,第二次状态将正常。

这是一个由某些全局状态引起的Qt错误。请注意,无论您是否调用QSettings对象上的
delete
,结果都会有所不同,您应该这样做。以下是第一次跑步的简要总结:

  • 结果代码设置为
    NoError
  • 将检查全局缓存以查看文件是否存在
  • 您的文件不是第一次出现,因此将在
    qsettings.cpp
    第1530行(Qt-4.6.2)对其进行解析
  • 解析将导致错误并设置结果代码(请参见
    qsettings.cpp
    第1552行)
  • 返回错误结果代码
  • 第二次运行是不同的:

  • 结果代码设置为
    NoError
  • 如果已检查全局缓存,则文件存在
  • 检查文件大小和时间戳以查看文件是否已更改(请参见
    qsettings.cpp
    第1424行)
  • 返回的结果代码恰好是
    NoError
    ——假定文件已正确解析

  • 你能粘贴你的代码和文件吗?是的…这是方法:文件是: