7

私がやろうとしているのは、レジストリキー(NOT VALUE、KEY)がレジストリに存在するかどうかを確認することです。それを確認する方法が見つかりません。

アイディア?

4

3 に答える 3

18

QSettings を使用すると、キーの親を開き、そのキーのリストを取得できます。関数childGroups()を使用して、キーのリストを取得します。qt の「グループ」は 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;
于 2012-02-24T18:57:03.817 に答える
0

編集:

2011年に私は書いた:

レジストリはWindowsの概念であり、Qtのクロスプラットフォームの概念に適合していません。WindowsAPIまたは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がWindowsキーを開くことができるようになっていますQSettings::NativeFormat

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

「HKEY_LOCAL_MACHINE」のようなものをソースにハードコーディングしている場合でも、Qtが意図する方法でプラットフォーム間でコードを抽象化するという精神を持っていないことをお勧めします。しかし、明らかに(少なくとも最近のQtバージョンでは)Qtを掘り下げて、WindowsレジストリAPIを呼び出すことなくこれを行うことができます。

于 2011-12-13T05:17:45.683 に答える