2009-03-31 9 views
18
  • Linux: $HOME/.config
  • ventanas: %APPDATA%
  • Mac OS: $HOME/.config

Se puede ajustar usando http://qt-project.org/doc/qt-4.8/qsettings.html#setPath, pero parece que a mí no puede recuperarloQt4.4 cómo obtener la ruta ajustes del usuario

http://qt-project.org/doc/qt-4.8/qlibraryinfo.html#locationQLibraryInfo::LibrariesPath devuelve el sistema de configuración de ancho dir, que no es lo que quiero.

¿Alguna idea, o tengo que codificarla por separado para cada plataforma?

€: Quiero crear un subdirectorio y almacenar archivos en él. (Puede castigarme si esta es una mala idea)

Respuesta

19

Esto podría no responder su pregunta directamente: si desea almacenar datos persistentes por usuario, ¿no debería usar QDesktopServices::storageLocation(QDesktopServices::DataLocation) en su lugar?

+0

/home/user/.local/share/data// se ve bien, aunque parece no ser específico de QT. ¿Alguien de ustedes puede probar esto en la ventana y pegar el resultado aquí? Eso sería genial. gracias –

+0

En Windows XP, debería ser algo así como "C: \ Documento y configuración \ usuario \ Configuración local \ Datos de aplicación" –

+0

eso es lo que quería. Muchas gracias. –

0

¿En qué plataforma se encuentra?
Puede estar relacionado o no, pero en Windows, el valor predeterminado es escribir QSettings en el registro.

+0

quiero para almacenar archivos en este directorio. y ya sé dónde están en cada plataforma, pero ¿hay alguna forma de obtener esta información? –

1

Por lo que yo sé, no puede recuperar la ruta. En la fuente de Qt, src/corelib/io/qsettings.cpp, hay una función para obtener la ruta:

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

pero no es accesible desde código usando Qt. No puede copiarlo y usarlo tampoco, porque usa Qt globales para almacenar la ruta ...

EDITAR: Se publicó una solución, usando QDesktopServices.storageLocation(QDesktopServices.DataLocation) pero no hace exactamente lo que la pregunta estaba pidiendo , es decir, si configuro una ruta personalizada usando QSettings.setPath(), no refleja el cambio.

0

Leí más en la pregunta de lo que había, ya que fue publicado originalmente. Está más claro después de las ediciones. Ok, por lo que no se puede utilizar ..

QString QSettings::fileName() const 

Devuelve la ruta en la que los ajustes se escriben en el uso de este objeto QSettings se almacenan.

En Windows, si el formato es QSettings::NativeFormat, el valor devuelto es una ruta de registro del sistema, no una ruta de archivo.

+0

No quiero el directorio principal sino el directorio de configuraciones. ejemplos dados en la pregunta. –

+0

La respuesta se ha editado después de las ediciones de aclaración de la pregunta. –

1

¿Por qué necesita saber la ruta de configuración? Si va a poner configuraciones en él, puede usar QSettings. Pude ver haciendo un subdirectorio para mantener varias configuraciones, pero parece que la forma más fácil sería usar QSettings directamente.

+0

editó la razón en ello. gracias por su ayuda. –

+0

Son potencialmente megabytes de datos; esto puede ralentizar toda la configuración. –

8

Esto es una solución desagradable. Primero creas QSettings, luego obtienes su ubicación.

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

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

Créditos verifica el foro de Qt Center.

QSettings almacena la configuración predeterminada en el directorio de AppData del usuario. Consulte la documentación para QSettings. También este código indica almacenar la configuración en el formato de archivo Ini.

3

esto funciona tanto en qt qt 4 y 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 
Cuestiones relacionadas