2011-12-13 26 views

答えて

0

EDITは:

は、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と呼ばれるもののクロスプラットフォームのデザインをしています。

設定とプラットフォームの性質によって、これらはレジストリまたはファイル/ etcに格納されます。

しかし、あなたがQSettings::NativeFormatを使用する場合QSettingsは、Windowsキーを開くことができ@mateuszbによって答えに表示されます。

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

注:あなたは 'QSettingsの設定などの特殊キー' "HKEY_LOCAL_MACHINE \\ \\ソフトウェアのMicrosoft \\ Windowsの\\ CurrentVersionの\\アプリケーションのパス" '、何かのデフォルト(「HKEY_LOCAL_MACHINEを使用していない場合\\ソフトウェア\\ MySoft \\スターランナー\\ CurrentVersion \\ Appパス "、QSettings :: NativeFormat);'、 'settings.childGroups()を呼び出すと、空のレジストリキー' HKEY_LOCAL_MACHINE \ SOFTWARE \ MySoft \ Star Runner \ CurrentVersion \ App Paths'に移動します。これは望ましくない副作用であるかもしれません。私はこれが起こるのを防ぐ方法がないと信じています。 –

関連する問題