2013-07-01 30 views
1

我有一個應用程序,用戶可以更改保存文件的默認文件夾。Qt - 將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沒有價值。

+0

請調用'sync()'方法,並檢查QSettings的'status()'函數的結果。例如,您可能沒有寫入註冊表的權限。 – eraxillan

+0

Hi 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配置單元。這個程序應該證明它是否有效。如果它有效,你應該檢查你的代碼或發佈它,否則有更深層次的問題。

相關問題