iT邦幫忙

2023 iThome 鐵人賽

DAY 28
0
Software Development

Qt 6 跨平台應用程式開發系列 第 28

D28: 「設定」記住使用者的喜好

  • 分享至 

  • xImage
  •  

在應用程式中,提供一個方式記住使用者的喜好十分重要。要不要打開通知、要不要在啟動時同步資料、要深色模式還是淺色模式?這些都是使用者希望自定義的選項,而且每次應用程式啟動時,都要記住上一次使用者的選擇。

而 QSettings 正是 Qt 提供給我們用於儲存及讀取這些使用者設定的工具。今天我們將來了解怎麼使用它。

基本使用

QSettings 可以讓你簡單地儲存和讀取用戶的設定。在大多數情況下,你可以將它當作一個鍵值對(Key-Value Pair)的集合來使用。以下是一個簡單的例子來展示它的基本使用方法:

#include <QSettings>

// 創建和使用 QSettings 物件
QSettings settings("YourCompany", "YourApp");

// 設定值
settings.setValue("username", "user01");
settings.setValue("password", "mypassword");
settings.setValue("theme", "dark");

// 讀取值
QString username = settings.value("username").toString();
QString password = settings.value("password").toString();
QString theme = settings.value("theme").toString();

分組設定

如果設定變得越來越多,可能想要分組來組織它們。QSettings 允許你做到這一點,像這樣:

QSettings settings("YourCompany", "YourApp");

settings.beginGroup("MainWindow");
settings.setValue("size", QSize(800, 600));
settings.setValue("position", QPoint(100, 100));
settings.endGroup();

settings.beginGroup("API");
settings.setValue("key", "mysecretapikey");
settings.endGroup();

要讀取分組中的設定值,需在讀取前呼叫 beginGroup(),在完成後用 endGroup()。

文件格式和儲存位置

預設的,QSettings 會在 Windows 上使用 Windows 註冊表,而在 macOS 上使用 plist 檔案。Linux 上使用 INI 檔案。你可以選擇指定一個格式:

QSettings settings(QSettings::IniFormat, QSettings::UserScope, "YourCompany", "YourApp");

而 QSettings 將會把設定檔儲存在一個標準的位置。如果你想知道你的設定檔被儲存在哪裡,或者你想要手動備份它,你可以使用 fileName() 函數取得完整路徑:

QString path = settings.fileName();

記住視窗的大小和位置

一個使用者通常很喜歡的功能,就是應用程式能夠記住它上一次的狀態,例如視窗的大小和位置。透過 QSettings 可以輕易實現這個功能。

我們希望在應用程式結束時儲存視窗的當前狀態,所以在視窗關閉事件中這樣做:

void MyMainWindow::closeEvent(QCloseEvent *event)
{
    QSettings settings("MyCompany", "MyApp");
    settings.setValue("geometry", saveGeometry());
    settings.setValue("windowState", saveState());
    QMainWindow::closeEvent(event);
}

在範例中,saveGeometry() 和 saveState() 分別儲存了視窗的大小、位置和其他狀態(例如是否最大化)。這些資訊儲存在 QSettings 中,留待下次開啟應用程式時讀取。

回復視窗狀態

當應用程式下次啟動時,希望它回復到之前的狀態。所以在視窗初始化時進行:

void MainWindow::readSettings()
{
    QSettings settings("MyCompany", "MyApp");
    restoreGeometry(settings.value("geometry").toByteArray());
    restoreState(settings.value("windowState").toByteArray());
}

這裡,restoreGeometry() 和 restoreState() 函數將之前儲存的狀態重新套用到視窗上。

記得要在 MainWindow 的初始化過程或建構子呼叫 readSettings(),應用程式啟動時才能回復到先前狀態。同時,也要確保視窗正確觸發 closeEvent(),才能在適當時機儲存視窗的狀態。

到此為止,你應該已經掌握了 QSettings 的基本用法。可以用它來儲存和恢復用戶的偏好設定啦!


上一篇
D27: Qt 發出網路請求
下一篇
D29: 發布 Qt 應用程式給其他人使用
系列文
Qt 6 跨平台應用程式開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言