QSettings 사용법 (1)
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 groupis set using beginGroup(),the first-levelkeys in that group are returned,without thegroup 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_OBJECTpublic: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");// logins1for (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");// logins2for (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;//QSettingsint 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;}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.