私がやっているのは、レジストリキー(NOT VALUE、KEY)がレジストリに存在するかどうかを確認することです。私はそれを確認する方法を見つけることができません。QSettingsで値のレジストリが存在するかどうかをチェック
アイデア?
私がやっているのは、レジストリキー(NOT VALUE、KEY)がレジストリに存在するかどうかを確認することです。私はそれを確認する方法を見つけることができません。QSettingsで値のレジストリが存在するかどうかをチェック
アイデア?
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を呼び出すことなくこれを行うことができます。
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;
注:あなたは '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'に移動します。これは望ましくない副作用であるかもしれません。私はこれが起こるのを防ぐ方法がないと信じています。 –