2011-12-13 28 views

Trả lời

0

EDIT:

Năm 2011 tôi đã viết:

Việc đăng ký là một khái niệm Windows và không phù hợp với các khái niệm nền tảng Qt của. Bạn sẽ phải sử dụng Windows API hoặc trình bao bọc C++ cho nó.

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

Nếu nhu cầu của bạn là trừu tượng hơn cho ứng dụng của bạn để lưu và khôi phục cài đặt riêng của mình, Qt có một thiết kế nền tảng của một cái gì đó gọi là QSettings.

Tùy thuộc vào bản chất của cài đặt và nền tảng, sẽ lưu trữ chúng trong sổ đăng ký hoặc trong tệp/v.v.

Nhưng nó xuất hiện trong câu trả lời bằng @mateuszb rằng QSettings có thể mở khóa Windows nếu bạn sử dụng QSettings::NativeFormat:

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

Tôi vẫn đề nghị rằng nếu bạn đang hardcoding một cái gì đó như "HKEY_LOCAL_MACHINE" vào nguồn của bạn, rằng bạn không thực sự theo tinh thần trừu tượng mã của bạn trên các nền tảng theo cách mà Qt dự định. Nhưng bạn dường như có thể (ít nhất là trong các phiên bản Qt gần đây) làm điều này mà không cần đào dưới Qt và gọi API đăng ký Windows.

14

Sử dụng QSettings bạn có thể mở phụ huynh của khóa và truy xuất danh sách các khóa của khóa đó. Sử dụng hàm childGroups() để lấy danh sách khóa. Có vẻ như "các nhóm" trong qt là các khóa trong Windows registry.

Đây là cách duy nhất tôi tìm thấy để kiểm tra xem khóa có tồn tại không. Trong đoạn mã này, tôi tìm khoá "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

Lưu ý: Nếu bạn không sử dụng chìa khóa đặc biệt ' "HKEY_LOCAL_MACHINE \\ Software \\ Microsoft \\ của Windows \\ CurrentVersion \\ App Paths"', nhưng một cái gì đó mặc định như 'thiết lập QSettings ("HKEY_LOCAL_MACHINE \\ Software \\ MySoft \\ Star Runner \ CurrentVersion \\ Đường dẫn ứng dụng ", QSettings :: NativeFormat);', sau đó gọi 'settings.childGroups()' sẽ tạo một khóa registry trống 'HKEY_LOCAL_MACHINE \ SOFTWARE \ MySoft \ Star Runner \ CurrentVersion \ App Paths'. Đây có thể là một tác dụng phụ không mong muốn. Tôi tin rằng không có cách nào để ngăn chặn điều này xảy ra. –

Các vấn đề liên quan