在應用程式中,提供一個方式記住使用者的喜好十分重要。要不要打開通知、要不要在啟動時同步資料、要深色模式還是淺色模式?這些都是使用者希望自定義的選項,而且每次應用程式啟動時,都要記住上一次使用者的選擇。
而 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 的基本用法。可以用它來儲存和恢復用戶的偏好設定啦!