跨平台持久化鍵值對:
HKEY_CURRENT_USER\Software\OrgName\AppName)~/Library/Preferences/OrgName.AppName.plist~/.config/OrgName/AppName.conf (INI 格式)// 專案 .pro 需設定組織與應用名稱
// QCoreApplication::setOrganizationName("MyCompany");
// QCoreApplication::setApplicationName("MyApp");
void LoginDialog::saveCredentials(const QString &user, const QString &pwd, bool remember) {
QSettings settings; // 自動使用組織/應用名稱
settings.beginGroup("Login");
if (remember) {
settings.setValue("username", user);
// 密碼建議加密儲存 (簡單示範用 Base64,生產請用 AES/金鑰串)
settings.setValue("password", pwd.toUtf8().toBase64());
settings.setValue("remember", true);
} else {
settings.remove("username");
settings.remove("password");
settings.setValue("remember", false);
}
settings.endGroup();
}
void LoginDialog::loadCredentials(QString &user, QString &pwd, bool &remember) {
QSettings settings;
settings.beginGroup("Login");
remember = settings.value("remember", false).toBool();
if (remember) {
user = settings.value("username").toString();
pwd = QByteArray::fromBase64(settings.value("password").toByteArray());
}
settings.endGroup();
}
QCryptographicHash (哈希驗證) 或對稱加密 (AES-GCM) + 金鑰派生 (PBKDF2)。QKeychain 第三方庫統一介面。QSettings 建構前未 QCoreApplication::setOrganizationName/ApplicationName → 寫入預設位置 (`HKEY_CURRENT_USER\Software\QtProject\...`),難以管理。beginGroup() 隔離。beginWriteArray/endArray、setValue 支援 `QVariant` 可序列化類型。程式碼倉庫完整範例:Qt 官方 Settings 範例。