2009-03-31 10 views
18
  • linux: $HOME/.config
  • finestre: %APPDATA%
  • Mac OS: $HOME/.config

Può essere impostato utilizzando http://qt-project.org/doc/qt-4.8/qsettings.html#setPath, ma sembra come lo sono io non in grado di recuperarlo.Qt4.4 come ottenere il percorso impostazioni utente

http://qt-project.org/doc/qt-4.8/qlibraryinfo.html#locationQLibraryInfo::LibrariesPath restituisce la directory delle impostazioni di sistema, che non è quello che voglio.

Qualche idea o devo codificarlo separatamente per ogni piattaforma?

€: Voglio creare una sottodirectory e archiviarvi i file. (Potresti punirmi se questa è una cattiva idea)

risposta

19

Questo potrebbe non rispondere alla domanda direttamente: se si desidera archiviare dati persistenti per utente, non si dovrebbe utilizzare QDesktopServices::storageLocation(QDesktopServices::DataLocation)?

+0

/home/user/.local/share/data// ha un bell'aspetto, anche se sembra non essere specifico per QT. Qualcuno di voi può provare questo sul windoze e incollare il risultato qui? Sarebbe fantastico. grazie –

+0

Su Windows XP, dovrebbe essere qualcosa come "C: \ Document and Settings \ user \ Impostazioni locali \ Dati applicazioni" –

+0

è quello che volevo. Grazie tante. –

0

Che piattaforma sei?
Potrebbe essere correlato o meno, ma in Windows, l'impostazione predefinita è scrivere QSettings sul registro.

+0

voglio memorizzare i file in questa directory. e so già dove si trovano su ogni piattaforma, ma c'è un modo per ottenere queste informazioni? –

1

Per quanto posso dire, non è possibile recuperare il percorso. Nella fonte Qt, src/corelib/io/qsettings.cpp, c'è una funzione per ottenere il percorso:

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

ma non è accessibile da codice utilizzando Qt. Non è possibile copiarlo e usarlo, perché utilizza le QT globali interne per memorizzare il percorso ...

MODIFICA: È stata pubblicata una soluzione, utilizzando QDesktopServices.storageLocation(QDesktopServices.DataLocation) ma non fa esattamente quello che la domanda stava chiedendo , cioè se ho impostato un percorso personalizzato utilizzando QSettings.setPath() non riflette la modifica.

0

Ho letto di più nella domanda rispetto a come era stata originariamente pubblicata. È più chiaro dopo le modifiche. Ok, quindi non si può usare ..

QString QSettings::fileName() const 

restituisce il percorso dove le impostazioni vengono scritti usando questo oggetto QSettings vengono memorizzati.

Su Windows, se il formato è QSettings::NativeFormat, il valore restituito è un percorso di registro di sistema, non un percorso di file.

+0

Non voglio la home directory ma la directory delle impostazioni. esempi forniti nella domanda. –

+0

La risposta è stata modificata seguendo le modifiche di chiarimento alla domanda. –

1

Perché è necessario conoscere il percorso delle impostazioni? Se hai intenzione di inserire le impostazioni, puoi usare QSettings. Potrei vedere fare una sottodirectory per contenere varie impostazioni, ma sembra che il modo più semplice sarebbe utilizzare direttamente QSettings.

+0

ha modificato il motivo in esso. grazie per il vostro aiuto –

+0

È potenzialmente megabyte di dati - questo potrebbe rallentare l'intera cosa delle impostazioni. –

8

Questa è una brutta soluzione. Prima crei QSettings, quindi ottieni la sua posizione.

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

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

I crediti vanno al forum Qt Center.

QSettings memorizza la configurazione di default nella directory utente AppData. Consultare la documentazione per QSettings. Anche questo codice indica di memorizzare la configurazione nel formato di file Ini.

3

questo funziona sia su Qt 4 e 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 
Problemi correlati