Uso de la clase QSettings

La clase QSettings del framework Qt nos permitirá guardar las configuraciones de nuestra aplicación ya sea en el registro o en un archivo de configuración .ini, por ejemplo, podemos guardar el tamaño y posición de la ventana para que cuando el usuario abra nuevamente la aplicación esta se muestra en la misma posición y tamaño que el usuario había configurado posteriormente, del mismo modo podemos guardar todo tipo de información y recuperarla posteriormente.

Para este tutorial vamos a construir una pequeña aplicación, la misma se verá de la siguiente manera:

Qt5 uso de la clase QSettings

La idea es que podamos configurar la fuente del texto y guardar esta configuración antes de cerrar la aplicación de este modo cuando se abra la aplicación nuevamente recuperamos los datos y ponemos la configuración de la fuente al estado anterior.

El código que crea la GUI es el siguiente:

font = new QFontComboBox;                                              
font->setFontFilters(QFontComboBox::ScalableFonts);                    
                                                                       
size = new QComboBox;                                                  
size->setMaximumWidth(100);                                            
                                                                       
for(int n = 5; n <= 100; n += 5) size->addItem(QVariant(n).toString());
                                                                       
label = new QLabel;                                                    
label->setText("Tutorial QSettings");                                  
label->setAlignment(Qt::AlignCenter);                                  
                                                                       
QHBoxLayout *fontLayout = new QHBoxLayout;                             
fontLayout->addWidget(font);                                           
fontLayout->addWidget(size);                                           
                                                                       
QVBoxLayout *root = new QVBoxLayout;                                   
root->addLayout(fontLayout);                                           
root->addWidget(label);                                                
                                                                       
this->setLayout(root);

Usaremos tres widgets, un QFontComboBox cuya funcionalidad es mostrar las fuentes que tenemos disponibles en nuestro sistema, el QComboBox lo usaremos para cambiar el tamaño de fuente y el QLabel muestra el texto de ejemplo.

Guardar configuración en .ini

En nuestro ejemplo usaremos un archivo .ini para guardar nuestra configuración, aunque también se pueda guardar en el registro o en una ruta y formato personalizada.

El momento adecuado para guardar la configuración es antes de cerrar la aplicación para ello agregaremos un manejador para este evento y con la ayuda de la clase QSettings guardamos los datos deseados.

void Widget::closeEvent(QCloseEvent*)
{
   QSettings settings("miapp.ini", QSettings::IniFormat);
   settings.setValue("geometry", this->geometry());
   settings.setValue("font", this->font->currentFont());
   settings.setValue("fsize", this->size->currentText());
}

En el constructor de la clase indicamos el nombre del archivo y el formato que deseamos utilizar, usando el método setValue(...) guardamos los datos que nos interesen, en nuestro caso guardaremos la fuente, el tamaño y el geometry, este ultimo nos sirve para obtener la posición y tamaño de la ventana.

Al ejecutar el programa, cambiar la fuente, el tamaño y posición de la ventana cuando cerremos la aplicación se creará un archivo con un contenido similar a este:

[General]
geometry=@Rect(435 509 630 378)
font=@Variant(\0\0\0@\0\0\0\x10)
fsize=40

Ahora solo nos resta recuperar estos datos al momento de iniciar el programa, el proceso es similar salvo que ahora utilizaremos el método value("nombre") para recuperar los datos, solo debemos indicar el nombre del dato deseado y opcionalmente se puede indicar un valor por defecto en caso que de no se encuentre el datos solicitado, usaremos alguno de los métodos toXxx() para realizar la conversión al tipo requerido.

QSettings settings("miapp.ini", QSettings::IniFormat);                   
QRect geo = settings.value("geometry", QRect(20, 20, 200, 100)).toRect();
QFont fnt = settings.value("font").value<QFont>();                       
QString fsize = settings.value("fsize").toString();

El dato geometry tiene asignado un valor por defecto, este se asignará al objeto geo en caso de que en el archivo .ini no se encuentre el dato correspondiente.

En caso de que tengamos un método toXxx() correspondiente, por ejemplo en el caso de la fuente (QFont) no existe toFont() por lo que podemos usar value<QFont> para realizar la conversión.

Guardar en registro de Windows

Para almacenar los datos en el registro de Windows solo debemos usar una de las sobrecargas del constructor de la clase QSettings en ella indicaremos dos cadenas de texto, la primera usualmente indica en nombre de la compañía que desarrolla el software y el segundo en nombre del programa, por ejemplo:

QSettings settings("TutorProgramacion", "TutorialQt");

Con esto la configuración será almacenada en la clave de registro:

HKEY_CURRENT_USER\Software\TutorProgramacion\Qt

Qt guardar datos en registro de windows

Todo lo demás queda exactamente igual.

Descargar código: tutorial-qsettings

Comentarios

Temas relacionados

Entradas populares de este blog

Conectar SQL Server con Java

Entrenar OpenCV en Detección de Objetos

Spring Boot : Crear una Aplicación Web

Conociendo la clase cv::Mat de OpenCV

Spring Acceso a datos con JDBC