c++ - resueltos - Qt4.4 cómo obtener la ruta de configuración del usuario
ruta critica ejercicios resueltos pdf (7)
¿En qué plataforma estás?
Puede estar relacionado o no, pero en Windows, el valor predeterminado es escribir QSettings en el registro.
- linux:
$HOME/.config
- ventanas:
%APPDATA%
- mac os:
$HOME/.config
Se puede configurar utilizando http://qt-project.org/doc/qt-4.8/qsettings.html#setPath , pero parece que no puedo recuperarlo.
http://qt-project.org/doc/qt-4.8/qlibraryinfo.html#location QLibraryInfo::LibrariesPath
devuelve el directorio de configuración de todo el sistema, 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. (Puedes castigarme si esto es una mala idea)
¿Por qué necesitas conocer la ruta de configuración? Si va a poner configuraciones en él, podría usar QSettings
. Podía ver hacer un subdirectorio para mantener varias configuraciones, pero parece que la forma más fácil sería usar QSettings
directamente.
Es posible que esto no responda directamente a su pregunta: si desea almacenar datos persistentes por usuario, ¿no debería utilizar QDesktopServices::storageLocation(QDesktopServices::DataLocation) lugar?
Esta es una solución desagradable. Primero crea QSettings
, luego obtiene su ubicación.
QSettings cfg(QSettings::IniFormat, QSettings::UserScope,
"organization", "application");
QString config_dir = QFileInfo(cfg.fileName()).absolutePath() + "/";
Los créditos van al foro del Centro Qt.
QSettings
almacena la configuración predeterminada en el directorio AppData del usuario. Consulte la documentación para QSettings
. También este código le indica que guarde la configuración en el formato de archivo Ini.
Leí más en la pregunta de lo que había, como se publicó originalmente. Está más claro después de las ediciones. Ok, entonces no puedes usar ...
QString QSettings::fileName () const
Devuelve la ruta donde se guardan las configuraciones usando este objeto QSettings
que se almacena.
En Windows, si el formato es QSettings::NativeFormat
, el valor de retorno es una ruta de registro del sistema, no una ruta de archivo.
Por lo que puedo decir, no puedes recuperar el camino. En la fuente 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 el código usando Qt. Tampoco puede copiarlo y usarlo, ya que usa globales Qt internos 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 .
esto funciona tanto en qt 4 como en 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