您的位置:首页 > 编程语言 > Qt开发

Qt开发的应用记录读取用户习惯设置的方法

2017-10-31 23:23 274 查看

Qt开发的应用记录读取用户习惯设置的方法

在软件的使用过程中,有些用户有特定的习惯,如:窗口大小、参数设置、文件打开的方式等。当下次启动软件时候,用户往往希望设置和上次的一样,因此我们需要有一个文件来保存用户的一些偏好信息,在程序重新启动的时候再进行偏好设置。当然我们可以自己记录并保存用户的习惯,下次启动应用的时候读取就好。但是,Qt给开发者提供了QSetting类。允许开发者创建一个配置文件或者操作注册表,还可以指定配置文件的位置和下次读取,恢复用户的上次设置。

QSetting类

QSetting是一个平台无关的可以设置和读取应用程序设置的类。由于笔者是在windows环境下做软件开发,所以这个博客中的例子以windows平台进行测试。

初始化

在创建QSetting对象时,应该把公司或组织,还有应用程序的名字传递给构造函数,例如,如果应用程序叫做Star Runner,公司叫做MySoft,那么应该像下面这样构造对象

QSetting settings("MySoft","Star Runner");


键key和值value

QSetting有键和值组成,使用QString指定键key的名字,使用QVariant来存储和key相关联的值。使用setValue(),设定key。例如:

setting.setValue(“editor/warpMargin”,68);


如果已经存在了同名的key,那么新的值会覆盖原来的值,使用value()函数获取setting的值。例如:

int margin=setting.value(“editor/warpMargin”).toInt();


如果没有指定的key,那么value()会返回一个Null QVariant,也可以为value()指定一个缺省的值,例如:

int margin=setting.value(“editor/warpMargin,80).toInt();


缺省值就是80,value() 返回的值是一个QVariant,把他转换成int类型。

QSetting 分隔符

使用“/”作为分隔符,而不是“\”。例如:

settings.setValue("mainwindow/size", win->size());
settings.setValue("mainwindow/fullScreen", win->isFullScreen());
settings.setValue("outputpanel/visible", panel->isVisible());


如果想设置子目录,也可以使用beginGroup()和endGroup()配合使用,如下

settings.beginGroup("mainwindow");
settings.setValue("size", win->size());
settings.setValue("fullScreen", win->isFullScreen());
settings.endGroup();


应用程序状态的保存与读取

在关闭应用程序时候保存应用程序窗口的大小和位置,在再次打开应用程序时候,读取出来。

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();
}


在构造函数中调用readSetting(),在关闭窗口事件中调用writeSettings()

MainWindow::MainWindow()
{
...
readSettings();
}

void MainWindow::closeEvent(QCloseEvent *event)
{
if (userReallyWantsToQuit()) {
writeSettings();
event->accept();
} else {
event->ignore();
}
}


清空所有记录

settings.clear();


建议

在保存默认设置的时候,建议添加默认值,如果未添加软件在第一次运行时,参数等设置全部混乱!

默认参数设置如下。

ui.radioButtonC1->setChecked(settings.value("radioButtonC1", false).toBool());
ui.lineEditZDName->setText(settings.value("lineEditZDName", "ZD").toString());
ui.checkBoxZD->setChecked(settings.value("checkBoxZD", true).toBool());
ui.timeEditStart->setTime(settings.value("timeEditStart", QTime(8, 35, 06)).toTime());
ui.spinBoxTimeLable->setValue(settings.value("spinBoxTimeLable", 1).toInt());


参考

http://blog.chinaunix.net/uid-11765716-id-3181163.html

http://blog.csdn.net/u011512437/article/details/43927321
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐