Qt開發的應用記錄讀取用戶習慣設置的方法

Qt開發的應用記錄讀取用戶習慣設置的方法

版權聲明:本文爲博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接和本聲明。
本文連接:https://blog.csdn.net/wokaowokaowokao12345/article/details/78409385html

本文轉載自以上博客,侵刪c++

在軟件的使用過程當中,有些用戶有特定的習慣,如:窗口大小、參數設置、文件打開的方式等。當下次啓動軟件時候,用戶每每但願設置和上次的同樣,所以咱們須要有一個文件來保存用戶的一些偏好信息,在程序從新啓動的時候再進行偏好設置。固然咱們能夠本身記錄並保存用戶的習慣,下次啓動應用的時候讀取就好。windows

可是,Qt給開發者提供了QSetting類。容許開發者建立一個配置文件或者操做註冊表,還能夠指定配置文件的位置和下次讀取,恢復用戶的上次設置。函數

QSetting類

QSetting是一個平臺無關的能夠設置和讀取應用程序設置的類。因爲筆者是在windows環境下作軟件開發,因此這個博客中的例子以windows平臺進行測試。測試

初始化

使用以前先導入庫ui

#include <QSettings>

在建立QSetting對象時,應該把公司或組織,還有應用程序的名字傳遞給構造函數,例如,若是應用程序叫作Star Runner,公司叫作MySoft,那麼應該像下面這樣構造對象.net

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

鍵(key)和值(value)

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類型。

QSetting 分隔符

使用「/」做爲分隔符,而不是「\」。例如:

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

相關文章
相關標籤/搜索