2011-12-13 13 views
6

के साथ कोई मान रजिस्ट्री मौजूद है या नहीं, यह जांचने के लिए कि रजिस्ट्री में रजिस्ट्री कुंजी (VALUE, KEY) मौजूद नहीं है या नहीं। मुझे यह जांचने का कोई रास्ता नहीं मिल रहा है।जांचें कि QSettings

आइडिया?

उत्तर

0

संपादित करें:

2011 में मैंने लिखा:

रजिस्ट्री एक Windows अवधारणा है और क्यूटी के पार मंच विचार मेल नहीं खाती। इसके लिए आपको विंडोज एपीआई या सी ++ रैपर का उपयोग करना होगा।

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

अपनी आवश्यकताओं आपके आवेदन को बचाने और अपने स्वयं के सेटिंग पुनर्स्थापित करने के लिए और अधिक सार कर रहे हैं, क्यूटी कुछ QSettings कहा जाता है की एक पार मंच डिजाइन है।

सेटिंग और प्लेटफ़ॉर्म की प्रकृति के आधार पर, इन्हें रजिस्ट्री में या फ़ाइल/etc में संग्रहीत किया जाएगा।

लेकिन यह @mateuszb द्वारा जवाब में प्रकट होता है अगर आप QSettings::NativeFormat का उपयोग करें कि QSettings विंडोज कुंजी खोल सकते हैं:

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

मैं अभी भी सुझाव देंगे कि आप "HKEY_LOCAL_MACHINE" की तरह कुछ हार्डकोड कर रहे हैं आपके स्रोत में, कि आप सचमुच प्लेटफार्मों में अपने कोड को सारणीबद्ध करने की भावना में नहीं हैं जिस तरह से क्यूटी का इरादा है। लेकिन आप स्पष्ट रूप से (कम से कम हाल ही में क्यूटी संस्करणों में) कर सकते हैं क्यूटी के नीचे खुदाई और विंडोज रजिस्ट्री एपीआई को बुलाए बिना ऐसा करते हैं।

14

QSettings का उपयोग करके आप कुंजी के माता-पिता को खोल सकते हैं और इसकी चाबियों की सूची पुनर्प्राप्त कर सकते हैं। कुंजी की सूची प्राप्त करने के लिए फंक्शन childGroups() का उपयोग करें। ऐसा लगता है कि क्यूटी में "समूह" विंडोज रजिस्ट्री में कुंजी हैं।

यह एकमात्र तरीका है जिसे मैंने जांचने के लिए पाया कि कोई कुंजी मौजूद है या नहीं। इस कोड में मैं "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 \\ सॉफ्टवेयर \\ माइक्रोसॉफ्ट विंडोज \\ \\ \\ CurrentVersion अनुप्रयोग पथ "', लेकिन कुछ डिफ़ॉल्ट 'QSettings सेटिंग की तरह (" HKEY_LOCAL_MACHINE उपयोग नहीं कर रहे हैं \\ सॉफ़्टवेयर \\ माईसोफ्ट \\ स्टार रनर \\ CurrentVersion \\ ऐप पथ ", क्यूसेटिंग :: नेटिवफॉर्मेट); ', फिर' सेटिंग्स.चल्ड ग्रुप() 'को कॉल करने से एक रिक्त रजिस्ट्री कुंजी' HKEY_LOCAL_MACHINE \ सॉफ़्टवेयर \ MySoft \ Star बन जाएगी धावक \ CurrentVersion \ ऐप पथ'। यह एक अवांछित दुष्प्रभाव हो सकता है। मेरा मानना ​​है कि ऐसा होने से रोकने के लिए कोई रास्ता नहीं है। –

संबंधित मुद्दे