1

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

用户保存文件的文件夹: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没有任何价值。

4

1 回答 1

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 配置单元。这个程序应该证明它是否存在。如果它有效,您应该检查您的代码或发布它,否则手头会有更深层次的问题。

于 2013-07-02T06:33:04.510 回答