Tutorial QSettings
-
@ /*
A classe QSetings permite que o programador guarde informaçoes temporarias sem a necessidade de manipular arquivos como é feito normalmente.traduçao da definiçao segundo a documentaçao:
Descrição DetalhadaA classe QSettings fornece configurações persistência independentes de plataforma de aplicação.
Os usuários normalmente esperam um aplicativo que lembre suas configurações (tamanhos de janela e posições, opções, etc) através de sessões. Esta informação é frequentemente armazenados no registro do sistema no Windows e em arquivos XML preferências no Mac OS X. Em sistemas Unix, na ausência de um padrão, muitas aplicações (incluindo as aplicações KDE) usar arquivos de texto INI.
QSettings é uma abstração em torno destas tecnologias, permitindo que você salve e restaure as configurações do aplicativo de uma forma portátil. Ele também suporta formatos de armazenamento personalizados.
API QSettings é baseada em QVariant, permitindo que você salve diversos tipos baseadas em valor, como QString, QRect, e QImage, com o mínimo de esforço.
Se o que você precisa é uma estrutura de informaçoes nao-persistentes, considere o uso de QMap<QString, QVariant>.
*/
//Exemplos de uso:QSettings setting("MinhaEmpresa","nomeaplicativo");
/* ao criar um objeto do tipo QSettings, devemos passar como parametro para o contrutor da classe o nome da Organizaçao e o nome do aplicativo.
Essas informaçoes sao apenas para caracteristicas de organizaçao, sendo assim, pode-se definir qualquer nome.
*///podemos tambem, criar o objeto deixando que a aplicaçao defina o nome da organizaçao e o nome do aplicativo da seguinte maneira:
QCoreApplication::setOrganizationName("nomeaplicativo");
QCoreApplication::setOrganizationDomain("nomeaplicativo.com");
QCoreApplication::setApplicationName("MinhaEmpresa");
...
QSettings settings;//usa-se dessa forma, quando referenciamos muito a classe QSettings no momento em que temos mais de um aplicativo.
//Inserindo valores
setting.setValue("nome","Eduardo");
//aqui, chamamos o metodo setValue do objeto setting passando como parametro uma referencia(id, para melhor entendimento) e o conteudo.//buscando valores
QString str = setting.value("nome").toString();//podemos expecificar um valor padrao,caso nao exista nenhum. ex:
QString str = setting.value("nome","Maria").toString();
//se nao existir a informaçao, será atribuida a variavel str o conteúdo "maria" (sem aspas).//Sobrescrevendo valores:
setting.setValue("nome","Rodrigo");
setting.setValue("nome","Eduardo");
setting.setValue("nome","Ana");
if(setting.value("nome").toInt!=0)//verifica se é null
{
QString str = setting.value("nome").toString();
qDebug()<<str;
}// A saída no terminal será "Ana" pois o valor é sobrescrito a cada nova inserçao em uma dada referência.
//Usando grupos para melhor organizaçao
//podemos organizar por grupos, definindo um grupo diferente para cada form por exemplo.
setting.beginGroup("MainWindow");//inicio do grupo
setting.setValue("position",this->geometry());//armazena a localizaçao do forme por exemplo
setting.endGroup();//fim do grupo//Buscando no grupo
setting.beginGroup("MainWindow");//inicio do grupo
QRect myrect = setting.value("position").toRect();
setGeometry(myrect);
setting.endGroup();//fim do grupo//tudo que foi descrito acima, no windows essas informaçoes sao armazenadas no registro e no linux em um arquivo .conf no diretorio do app.
//a seguir um exemplo mais completo;
#include "MainWindow.h"
#include "QSettings"MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(botao,SIGNAL(clicked()),this,SLOT(loadsettings()));
this->loadsettings();}
MainWindow::~MainWindow()
{
delete ui;
}void MainWindow::savesettings()
{
//save
QSettings setting("MyCompany","myapp");
setting.beginGroup("MainWindow");
setting.setValue("position",this->geometry());
setting.endGroup();
}void MainWindow::loadsettings()
{
//load
QSettings setting("MyCompany","myapp");
setting.beginGroup("MainWindow");
//pegando o conteudo
QRect myrect = setting.value("position").toRect();
setGeometry(myrect);
setting.endGroup();
}//bibliografia
// Documentaçao do Qt. site: http://qt-project.org/doc/qt-4.8/qsettings.html
// canal voidrealms. site: http://www.youtube.com/watch?v=TNIkeFfzH-g&list=SP2D1942A4688E9D63&index=92@