QT保存设置QSetting

来源:互联网 发布:pdf笔记软件 编辑:程序博客网 时间:2024/04/29 22:20

当应用中有设置偏好时,必然的就需要保存用户的设置(总不能让用户每次打开软件都去设置一遍吧。。。)。要想保存用户设置,QT提供了QSetting类,可以轻松的完成,而且还能跨应用访问,其实QSetting不只是能保存用户设置,不管什么变量都可以保存,包括用户登录状态等,虽然这可能不是最好的选择!使用QSetting时,会涉及到QVariant类的部分内容,下面来看看如何使用它们。


QSetting

初始化

QSettings settings("Company", "App");

如果在应用多个地方使用QSetting,应该这样设置:

QCoreApplication::setOrganizationName("Company");QCoreApplication::setOrganizationDomain("Company.com");QCoreApplication::setApplicationName("App");...QSettings settings;

OS X中,使用Domains取代Name来识别软件(如果不设置Domain,程序将根据Name推断Domain)

存储

void QSettings::setValue(const QString & key, const QVariant & value)

注意:修改原有设置不能立即生效,可使用sync()提交更改

读取

QVariant QSettings::value(const QString & key, const QVariant & defaultValue = QVariant()) const

当key不存在,返回NULL(defaultValue未设置时)或返回defaultValue。

存在性检测与删除

检测某个key存在性

bool QSettings::contains(const QString & key) const

删除某个key

void QSettings::remove(const QString & key)

查看所有key值

QStringList QSettings::allKeys() const

删除所有key

void QSettings::clear()

前缀

void QSettings::beginGroup(const QString & prefix)void QSettings::endGroup()

可在beginGroup()endGroup()之间使用多个setValue()
QSetting同样支持array概念

int QSettings::beginReadArray(const QString & prefix)void QSettings::beginWriteArray(const QString & prefix, int size = -1)

Fallback机制

key值查找顺序(假设公司为MySoft,应用为Star Runner)
1. a user-specific location for the Star Runner application
2. a user-specific location for all applications by MySoft
3. a system-wide location for the Star Runner application
4. a system-wide location for all applications by MySoft
设置QSetting对象

QSettings(Format format, Scope scope, const QString & organization, const QString & application = QString(), QObject * parent = 0)

Scope: QSettings::SystemScope、QSettings::UserScope
Format: QSettings::IniFormat、QSettings::NativeFormat

储存和恢复GUI程序

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();}MainWindow::MainWindow(){    ...    readSettings();}void MainWindow::closeEvent(QCloseEvent *event){    if (userReallyWantsToQuit()) {        writeSettings();        event->accept();    } else {        event->ignore();    }}

QVariant

转型

QVariant未提供由QVariant类型转换为QColor、QImage、QPixmap类型(但后者可转换为前者类型),但可以使用下面的Template函数来实现转型

T QVariant::value() constT qVariantValue(const QVariant & value)

注册用户类型

int qRegisterMetaType(const char * typeName)void qRegisterMetaTypeStreamOperators(const char * typeName)

0 0
原创粉丝点击