2013-07-01 1 views
1

응용 프로그램이있어서 사용자가 파일 저장을위한 기본 폴더를 변경할 수 있습니다.Qt - 등록에서 QSettings에 QString 경로 저장

사용자가 파일을 저장하는 폴더 : 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은 가치가 없었다.

+0

'sync()'메소드를 호출하고 QSettings의'status()'함수의 결과를 확인하십시오. 예를 들어 레지스트리에 대한 권한을 작성하지 않았을 수 있습니다. – eraxillan

+0

안녕하세요, Axilles, 답장을 보내 주셔서 감사합니다. 레지스트리에 정수 값을 쓸 수 있습니다. qstring을 저장하기 위해 수행해야 할 작업은 무엇입니까? 제발 도와주세요! – EVH671

+0

@ EVH761 그럼'status()'함수는 무엇을 반환합니까? 'NoError' 값을 반환하면 레지스트리에있는 모든 QVariant 지원 값을 저장할 수 있어야합니다. QString은 그 중 하나입니다. – eraxillan

답변

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 하이브에 쓸 수 있어야합니다. 이 프로그램은 증명해야합니다. 작동하는 경우 코드를 확인하거나 게시해야합니다. 그렇지 않으면 더 심각한 문제가 있습니다.

관련 문제