Qt - 在注册表中保存QString路径到QSettings

时间:2013-07-01 11:30:52

标签: c++ qt registry qstring qsettings

我有一个应用程序,用户可以更改保存文件的默认文件夹。

用户保存文件的文件夹:QString SaveImagesDirectory;

我希望当用户退出应用程序时,SaveImagesDirectory中的数据将保存在注册表中。

我尝试了以下代码:

QSettings settings(ORG_NAME, APP_NAME);
settings.setValue("LastGuiValue/LastSaveImagesDirectory",SaveImagesDirectory);

问题是当我刷新注册表时,LastSaveImagesDirectory中没有值。

因此,当我尝试使用以下代码阅读时:

SaveImagesDirectory=settings->value("LastGuiValue/LastSaveImagesDirectory",QDir::currentPath()).value<QString>();

变量SaveImagesDirectory只获得了QDir::currentPath()。我查看了注册表,确实LastSaveImagesDirectory没有任何价值。

1 个答案:

答案 0 :(得分:1)

早上好,

你可以通过实现像这样的简单测试程序验证系统是否能够写入注册表:

// Registry Write Test Programm

#include <QtGui/QApplication>
#include <QtGui/QMessageBox>
#include <QtCore/QSettings>
#include <QtCore/QString>
#include <QtCore/QVariant>

int main( int argc, char **argv )
{
  QApplication *app   = new QApplication( argc, argv );
  QSettings settings( QLatin1String( "D-Soft" ), QLatin1String( "RegistryTest" ) );

  QString hello = settings.value( "LastGuiValue/LastSaveImagesDirectory" ).toString();
  QMessageBox::information( NULL, QLatin1String( "Info" ),
    QString( QLatin1String( "From Settings: %1" ) ).arg( hello ) );

  if( hello.isEmpty() )
    hello = QLatin1String( "Oh my!" );

  settings.setValue( "LastGuiValue/LastSaveImagesDirectory", hello );

  delete app;
  app = NULL;

  return 0;
}

无需提升权限,您的程序应该能够写入HKLM_CURRENT_USER / SOFTWARE配置单元。该程序应该证明是否存在。如果它有效,你应该检查你的代码或发布它,否则手头有更深层次的问题。