QSetting ⽤法
QSettings 类提供“持久性”,平台独⽴的应⽤程序设置。意思是,程序关闭后QSettings 把窗体⼤⼩,位置,⽤户设置的Option 保存起来,下次
打开程序时再重新加载。
settings中文意思如果你需要的是“⾮持久性” 基于内存的数据结构,可以考虑使⽤QMap<QString, QVariant> 代替。
通常,对于Windows,配置信息保存在“注册表”中,Mac OS 是XML ⽂件,Unix 是INI ⽂件
// 构造函数
QSettings settings("MySoft", "Star Runner"); // 公司或组织名 // 应⽤程序名
QCoreApplication::setOrganizationName("MySoft");
QCoreApplication::setOrganizationDomain("mysoft"); // 专为Mac OS X 准备的
QCoreApplication::setApplicationName("Star Runner");
...
QSettings settings;
如果要在程序很多地⽅使⽤QSettings,⽤ QCoreApplication::setOrganizationName() 和
QCoreApplication::setApplicationName() 然后⽤QSettings 的默认构造函数。
这样,公司或组织名,应⽤程序名只要指定⼀次,QSettings settings 到处扔就⾏。
QSettings 存储了⼀对键值( Key / value ),Key 是⼀个QString,Value 是⼀个QVariant
settings.setValue("editor/wrapMargin", 68); // 添加⼀对键值
添加键值的时侯,如果Key 已存在,则Value 被重写。
出于效率的原因,setValue 不会⽴既写⼊(如注册表,INI, XML), 要⽴既写⼊可以⽤sync() 函数。
int margin = settings.value("editor/wrapMargin").toInt();
通过Key,取回Value。如果指定的Key 不存在,QSettings 返回空的QVariant(转成整型是 0)。
// 类型转换
QSettings settings("MySoft", "Star Runner");
QColor color = settings.value("DataPump/bgcolor").value<QColor>();
// 通过"/" 分组
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.beginGroup("outputpanel");
// readSettings() / writeSettings()
void MainWindow::writeSettings()
{
QSettings settings("Moose Soft", "Clipper");
settings.beginGroup("MainWindow");
settings.setValue("size", size());
settings.setValue("pos", pos());
}
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());
}
// readSettings() and writeSettings() 必须分别位于主窗体的构造函数和closeEvent 函数⾥⾯。 MainWindow::MainWindow()
{
...
readSettings();
}
void MainWindow::closeEvent(QCloseEvent *event)
{
if (userReallyWantsToQuit()) {
writeSettings();
event->accept();
} else {
event->ignore();
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论