版權聲明:本文爲博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接和本聲明。
本文連接:https://blog.csdn.net/wokaowokaowokao12345/article/details/78409385html
本文轉載自以上博客,侵刪c++
在軟件的使用過程當中,有些用戶有特定的習慣,如:窗口大小、參數設置、文件打開的方式等。當下次啓動軟件時候,用戶每每但願設置和上次的同樣,所以咱們須要有一個文件來保存用戶的一些偏好信息,在程序從新啓動的時候再進行偏好設置。固然咱們能夠本身記錄並保存用戶的習慣,下次啓動應用的時候讀取就好。windows
可是,Qt給開發者提供了QSetting類。容許開發者建立一個配置文件或者操做註冊表,還能夠指定配置文件的位置和下次讀取,恢復用戶的上次設置。函數
QSetting是一個平臺無關的能夠設置和讀取應用程序設置的類。因爲筆者是在windows環境下作軟件開發,因此這個博客中的例子以windows平臺進行測試。測試
使用以前先導入庫ui
#include <QSettings>
在建立QSetting對象時,應該把公司或組織,還有應用程序的名字傳遞給構造函數,例如,若是應用程序叫作Star Runner,公司叫作MySoft,那麼應該像下面這樣構造對象.net
QSettings settings("MySoft","Star Runner");
QSetting由鍵和值組成,使用QString指定鍵(key)的名字,使用QVariant來存儲和鍵相關聯的值。使用setValue(),設定值。例如:unix
settings.setValue(「editor/warpMargin」,68);
若是已經存在了同名的鍵,那麼新的值會覆蓋原來的值,使用value()函數獲取setting的值。例如:code
int margin=settings.value(「editor/warpMargin」).toInt();
若是沒有指定的key,那麼value()會返回一個Null QVariant,也能夠爲value()指定一個缺省的值,例如:htm
int margin=settings.value(「editor/warpMargin,80).toInt();
缺省值就是80,value() 返回的值是一個QVariant,把他轉換成int類型。
使用「/」做爲分隔符,而不是「\」。例如:
settings.setValue("mainwindow/size", win->size()); settings.setValue("mainwindow/fullScreen", win->isFullScreen()); settings.setValue("outputpanel/visible", panel->isVisible()); 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