2011-12-13 73 views

回答

0

編輯:

2011年我寫道:

註冊表是Windows的概念,不適合Qt的跨平臺的概念。您將不得不使用Windows API或C++包裝器。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724875(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/xka57xy4(v=vs.80).aspx

如果您的需求爲您的應用程序保存和恢復自己的設置比較抽象,Qt擁有的東西叫QSettings一個跨平臺的設計。

根據設置和平臺的性質,將它們存儲在註冊表中或文件/等。

但通過@mateuszb出現在答案,如果你使用QSettings::NativeFormat QSettings可以打開Windows鍵:

http://doc.qt.io/qt-5/qsettings.html#Format-enum

我還是建議,如果你是硬編碼像「HKEY_LOCAL_MACHINE」到你的源代碼中,你並不是真正在按照Qt的意圖在各個平臺上抽象你的代碼。但是你顯然可以(至少在最近的Qt版本中)不需要在Qt下挖掘並調用Windows註冊表API。

14

使用QSettings,您可以打開密鑰的父級並檢索其密鑰列表。使用功能childGroups()獲取密鑰列表。似乎qt中的「groups」是Windows註冊表中的鍵。

這是我發現檢查密鑰是否存在的唯一方法。在此代碼中,我查找關鍵字「SearchedKey」。

QSettings settings(
    "HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\App Paths", 
    QSettings::NativeFormat 
); 

if (settings.childGroups().contains("SearchedKey", Qt::CaseInsensitive)) 
    std::cout << "Key exists" << std::endl; 
else 
    std::cout << "Key doesn't exist" << std::endl; 
+1

注意:如果你沒有用特殊的關鍵字' 「HKEY_LOCAL_MACHINE \\ SOFTWARE \\ \\微軟的Windows \\ \\ CURRENTVERSION應用程序路徑」'的事,但像默認' 設置QSettings(「HKEY_LOCAL_MACHINE \\ Software \\ MySoft \\ Star Runner \\ CurrentVersion \\ App Paths「,QSettings :: NativeFormat);',然後調用'settings.childGroups()'將會創建一個空的註冊表鍵'HKEY_LOCAL_MACHINE \ SOFTWARE \ MySoft \ Star Runner \ CurrentVersion \ App Paths'。這可能是一個不希望的副作用。我相信無法防止這種情況發生。 –