2009-03-31 27 views
18
  • linux: $HOME/.config
  • cửa sổ: %APPDATA%
  • mac os: $HOME/.config

Nó có thể được thiết lập sử dụng http://qt-project.org/doc/qt-4.8/qsettings.html#setPath, nhưng có vẻ như tôi không thể truy xuất nó.Qt4.4 làm thế nào để có được con đường thiết lập người dùng

http://qt-project.org/doc/qt-4.8/qlibraryinfo.html#locationQLibraryInfo::LibrariesPath trả về thư mục cài đặt rộng của hệ thống, không phải là thứ tôi muốn.

Bất kỳ ý tưởng nào hoặc tôi có phải viết mã riêng cho từng nền tảng không?

€: Tôi muốn tạo thư mục con và lưu trữ tệp vào thư mục đó. (Bạn có thể trừng phạt tôi nếu đây là ý tưởng tồi)

Trả lời

19

Điều này có thể không trả lời câu hỏi của bạn trực tiếp: nếu bạn muốn lưu trữ dữ liệu liên tục cho mỗi người dùng, bạn có nên sử dụng QDesktopServices::storageLocation(QDesktopServices::DataLocation) thay thế không?

+0

/home/user/.local/share/data// có vẻ tốt, mặc dù có vẻ như không phải là đặc trưng của QT. Bất kỳ ai trong các bạn có thể thử điều này trên windoze và dán kết quả vào đây không? Điều đó thật tuyệt. cảm ơn –

+0

Trên Windows XP, nó phải giống như "C: \ Document and Settings \ user \ Local Settings \ Application Data" –

+0

đó là những gì tôi muốn. Cảm ơn nhiều. –

0

Bạn đang ở nền tảng nào?
Có thể có liên quan hay không nhưng trong cửa sổ, mặc định là viết QSettings vào sổ đăng ký.

+0

tôi muốn để lưu trữ tập tin trong thư mục này. và tôi đã biết họ đang ở đâu trên mỗi nền tảng, nhưng có cách nào để có được thông tin này không? –

1

Theo như tôi có thể nói, bạn không thể truy xuất đường dẫn. Trong nguồn Qt, src/corelib/io/qsettings.cpp, có một chức năng để lấy đường dẫn:

static QString getPath(QSettings::Format format, QSettings::Scope scope) 
{ 
    ... 

nhưng không thể truy cập từ mã sử dụng Qt. Bạn không thể sao chép nó và sử dụng nó, vì nó sử dụng hình cầu Qt bên trong để lưu trữ đường dẫn ...

EDIT: Một giải pháp đã được đăng, sử dụng QDesktopServices.storageLocation(QDesktopServices.DataLocation) nhưng nó không thực hiện chính xác những gì câu hỏi đã được yêu cầu , tức là nếu tôi đặt đường dẫn tùy chỉnh bằng cách sử dụng QSettings.setPath(), nó không phản ánh thay đổi.

0

Tôi đọc nhiều hơn về câu hỏi so với câu hỏi ban đầu đã được đăng. Nó rõ ràng hơn sau khi chỉnh sửa. Ok, vì vậy bạn không thể sử dụng ..

QString QSettings::fileName() const 

Trả về đường dẫn nơi thiết lập được ghi vào sử dụng đối tượng QSettings này được lưu trữ.

Trên Windows, nếu định dạng là QSettings::NativeFormat, giá trị trả lại là đường dẫn đăng ký hệ thống, chứ không phải đường dẫn tệp.

+0

Tôi không muốn thư mục chính nhưng thư mục cài đặt. các ví dụ được đưa ra trong câu hỏi. –

+0

Câu trả lời đã được chỉnh sửa sau khi chỉnh sửa rõ ràng cho câu hỏi. –

1

Tại sao bạn cần biết đường dẫn cài đặt? Nếu bạn định đặt các thiết lập trong đó, bạn có thể sử dụng QSettings. Tôi có thể thấy làm cho một thư mục con để giữ các cài đặt khác nhau, nhưng có vẻ như cách dễ nhất là sử dụng trực tiếp QSettings.

+0

đã chỉnh sửa lý do. cảm ơn sự giúp đỡ của bạn –

+0

Đó có thể là megabyte dữ liệu - điều này có thể làm chậm toàn bộ cài đặt. –

8

Đây là giải pháp khó chịu. Trước tiên, bạn tạo QSettings, sau đó nhận vị trí của nó.

QSettings cfg(QSettings::IniFormat, QSettings::UserScope, 
     "organization", "application"); 

QString config_dir = QFileInfo(cfg.fileName()).absolutePath() + "/"; 

Tín dụng truy cập diễn đàn Trung tâm Qt.

QSettings lưu cấu hình mặc định trong thư mục AppData của người dùng. Xem tài liệu cho QSettings. Mã này cũng hướng dẫn lưu trữ cấu hình ở định dạng tệp Ini.

3

này hoạt động trên cả qt 4 và qt 5

QApplication::setApplicationName("MyApp"); 
QApplication::setOrganizationName("Me"); 

QString homePath; 

#if QT_VERSION >= 0x050000 
    homePath = QStandardPaths::writableLocation(QStandardPaths::DataLocation); 
#else 
    homePath = QDesktopServices::storageLocation(QDesktopServices::DataLocation); 
#endif 
Các vấn đề liên quan