QT保存设置QSetting

转载自:http://blog.csdn.net/u011512437/article/details/43927321


当应用中有设置偏好时,必然的就需要保存用户的设置(总不能让用户每次打开软件都去设置一遍吧。。。)。要想保存用户设置,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() const
T qVariantValue(const QVariant & value)

注册用户类型
int qRegisterMetaType(const char * typeName)
void qRegisterMetaTypeStreamOperators(const char * typeName)
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值