QSettings 사용법 설명

63893 단어 Qsettings
본 고 는 먼저 개념 과 용법 에서 QSettings 의 간단 한 용법 을 설명 하고 마지막 으로 간단 하면 서도 전면적 인 사용 예 로 끝난다. 한 마디 로 실천 은 진실 한 지식 을 낳는다!
QSettings 클래스 는 '지속 성' 을 제공 하고 플랫폼 에 독립 된 응용 프로그램 설정 을 제공 합 니 다.프로그램 종료 후 QSettings 는 창 크기, 위치, 사용자 가 설정 한 Option 을 저장 하고 다음 에 프로그램 을 열 때 다시 불 러 온 다 는 뜻 이다.
만약 당신 이 필요 로 하 는 것 이 메모리 기반 의 데이터 구조 라면, QMap < QString, QVariant > 로 대체 하 는 것 을 고려 할 수 있 습 니 다.
일반적으로 윈도 에 대해 서 는 설정 정보 가 '레 지 스 트' 에 저장 되 며, 맥 OS 는 XML 파일 이 고, 유 닉 스 는 INI 파일 이다
/ / 구조 함수 QSettings settings ("MySoft", "Star Runner"); //  회사  // 응용 프로그램 이름
QCoreApplication::setOrganizationName("MySoft"); QCoreApplication::setOrganizationDomain("mysoft.com"); // Mac OS X 를 위 한 QCoreApplication:: setApplication Name ("Star Runner");...QSettings settings;
프로그램 여러 곳 에서 QSettings 를 사용 하려 면 QCoreapplication:: setOrganizationName () 과 QCoreapplication:: setapplicationName () 을 사용 하고 QSettings 의 기본 구조 함 수 를 사용 합 니 다.
이렇게 회사 나 조직 명, 응용 프로그램 명 을 한 번 만 지정 하면 QSettings settings 를 여기저기 던 지면 됩 니 다.
QSettings 는 키 (Key / value) 를 저장 합 니 다. Key 는 QString 이 고 Value 는 QVariant 입 니 다.
settings.setValue("editor/wrapMargin", 68);  //키 값 추가
키 값 을 추가 할 때 키 가 존재 하면 Value 를 다시 씁 니 다.
효율 적 인 이유 로 setValue 는 기 존 기록 (예 를 들 어 레 지 스 트, INI, XML) 을 세우 지 않 습 니 다. 기 존 기록 은 sync () 함수 로 사용 할 수 있 습 니 다.
int margin = settings.value("editor/wrapMargin").toInt();
Key 를 통 해 Value 를 되 찾 습 니 다.지정 한 Key 가 존재 하지 않 는 다 면, QSettings 는 빈 QVariant 로 되 돌아 갑 니 다.
/ / 유형 변환 QSettings 설정 ("MySoft", "Star Runner");QColor color =settings.value("DataPump/bgcolor").value();
/ / "/" 그룹 settings. setValue ("mainwindow / size", win - > size () 를 통 해 그룹 을 나 눕 니 다.settings.setValue("mainwindow/fullScreen",win->isFullScreen()); settings.setValue("outputpanel/visible",panel->isVisible());
settings.beginGroup("mainwindow"); settings.setValue("size", win->size()); settings.setValue("fullScreen",win->isFullScreen()); settings.endGroup();
settings.beginGroup("outputpanel"); settings.endGroup();
그룹 추가, 링크 화, 읽 기 쓰기 그룹 추가
void
QSettings
::beginWriteArray
(
const
QString
&
prefix
,
int
size
=
-
1
)
Adds prefix to the current group and starts writing an array of size size. 
If size is -1 (the default), it is automatically determined based on the indexes of the entries written.
If you have many occurrences of a certain set of keys, 
you can use arrays to make your life easier.
For example, let's suppose that you want to save a variable-length list of user names and passwords.
You could then write:

struct Login{
    QString userName;
    QString password;
};
QList<Login> logins;
...
QSettings settings;
settings.beginWriteArray("logins");
for (int i = 0; i < logins.size(); ++i) {
    settings.setArrayIndex(i);
    settings.setValue("userName", list.at(i).userName);
    settings.setValue("password", list.at(i).password);
}
settings.endArray();

그룹 옮 겨 다 니 기
int QSettings::beginReadArray(constQString&prefix)
Adds prefix to the current group and starts reading from an array. Returns the size of the array.
Example:
 struct Login {
     QString userName;
     QString password;
 };
 QList<Login> logins;
 ...
 QSettings settings;
 int size = settings.beginReadArray("logins");
 for (int i = 0; i < size; ++i) {
     settings.setArrayIndex(i);
     Login login;
     login.userName = settings.value("userName").toString();
     login.password = settings.value("password").toString();
     logins.append(login);
 }
 settings.endArray();

QStringList
QSettings
::childGroups
()
const
Returns a list of all key top-level groups that contain keys that can be read using the QSettings object.
Example:
 QSettings settings;
 settings.setValue("fridge/color", Qt::white);
 settings.setValue("fridge/size", QSize(32, 96));
 settings.setValue("sofa", true);
 settings.setValue("tv", false);
 QStringList groups = settings.childGroups();
 // groups: ["fridge"]

If a groupisset usingbeginGroup(),thefirst-levelkeysin that group are returned,withoutthegroup prefix.
 settings.beginGroup("fridge");
 groups = settings.childGroups();
 // groups: []
You can navigate through the entire setting hierarchy using childKeys() and childGroups() recursively.
See also childKeys() and allKeys().
//  readSettings()  /writeSettings()
 void MainWindow::writeSettings()
 {
    QSettings settings("Moose Soft", "Clipper");
    settings.beginGroup("MainWindow");
    settings.setValue("size", size());
    settings.setValue("pos", pos());
    settings.endGroup();
 }
 void MainWindow::readSettings()
 {
    QSettings settings("Moose Soft", "Clipper");
    settings.beginGroup("MainWindow");
    resize(settings.value("size", QSize(400, 400)).toSize());
    move(settings.value("pos", QPoint(200, 200)).toPoint());
    settings.endGroup();
 }
// readSettings() and writeSettings()                closeEvent    。
 MainWindow::MainWindow()
 {
    ...
    readSettings();
 }
 void MainWindow::closeEvent(QCloseEvent*event)
 {
    if (userReallyWantsToQuit()) {
        writeSettings();
        event->accept();
    } else {
        event->ignore();
    }
 }

단순 용례
main.cpp
#include
#include "mainwindow.h"
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}
 
  
 

mainwindow.h

#ifndef MAINWINDOW_H

#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
    
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    
private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp
#include
"mainwindow.h"
#include "ui_mainwindow.h"
#include<QList>
#include<QSettings>
#include<QFile>
#include<QStringList>
#include<QDebug>
struct Login {
     QString userName;
     QString password;
 };
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QList<Login> logins;
    Login lg1[5];
    for(int i=0;i<5;i++){
        lg1[i].userName=QString("log%1").arg(i);
        lg1[i].password="000";
        logins<<lg1[i];
    }
    QString myfile="test.ini";
    QSettings *settings=new QSettings(myfile,QSettings::IniFormat);
    settings->beginWriteArray("logins1");//   logins1
    for (int i = 0; i < logins.size(); ++i) {
        settings->setArrayIndex(i);
        settings->setValue("userName", logins.at(i).userName);
        settings->setValue("password", logins.at(i).password);
    }
    QList<Login> logins2;
    Login lg2[5];
    for(int i=0;i<5;i++){
        lg2[i].userName=QString("log%1").arg(i+5);
        lg2[i].password="000";
        logins2<<lg2[i];
    }
      settings->endArray();
    //QString myfile="test.txt";
    //QSettings *settings=new QSettings(myfile,QSettings::IniFormat);
    settings->beginWriteArray("logins2");
//   logins2
    for (int i = 5; i < logins2.size()+5; ++i) {
        settings->setArrayIndex(i);
        settings->setValue("userName", logins2.at(i-5).userName);
        settings->setValue("password", logins2.at(i-5).password);
    }
     settings->endArray();
      QStringList groups = settings->childGroups();
      foreach(QString str,groups)//      
      qDebug()<<str;
        //QSettings
      int size = settings->beginReadArray("logins1");
      for (int i = 0; i < size; ++i) {
          settings->setArrayIndex(i);
          Login login;
          login.userName = settings->value("userName").toString();
          login.password = settings->value("password").toString();
          logins.append(login);
      }
      settings->endArray();
      qDebug()<<logins.size();
      for(int i=0;i<logins.size();i++)
      {
          qDebug()<<i<<logins[i].userName;
      }
      size = settings->beginReadArray("logins2");
      for (int i = 0; i < size; ++i) {
          settings->setArrayIndex(i);
          Login login;
          login.userName = settings->value("userName").toString();
          login.password = settings->value("password").toString();
          logins.append(login);
      }
      settings->endArray();
      qDebug()<<logins.size();
      for(int i=0;i<logins.size();i++)
      {
          qDebug()<<i<<logins[i].userName;
      }
      settings->beginWriteArray("maingroup");
      //for (int i = 5; i < logins2.size()+5; ++i) {
      settings->setValue("userName", "root");
      settings->setValue("password", "000");
      //}
       settings->endArray();
       qDebug()<<settings->value("maingroup/userName").toString();//  maingroup userName  
}
MainWindow::~MainWindow()
{
    delete ui;
}
 
 

좋은 웹페이지 즐겨찾기