QSettings 사용법 설명
63893 단어 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;
}