首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Qt QSettings 儲存登入介面帳號密碼實作範例

     編輯:程式設計綜合問答

QSettings 核心機制

跨平台持久化鍵值對:

  • Windows:登錄表 (HKEY_CURRENT_USER\Software\OrgName\AppName)
  • macOS:~/Library/Preferences/OrgName.AppName.plist
  • Linux:~/.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();
}

安全性強化 (必要)

  1. 勿明文儲存密碼: 使用 QCryptographicHash (哈希驗證) 或對稱加密 (AES-GCM) + 金鑰派生 (PBKDF2)。
  2. 系統金鑰串: Windows (DPAPI/Credential Manager)、macOS (Keychain)、Linux (libsecret/kwallet) 提供硬體級加密儲存。Qt 6 可用 QKeychain 第三方庫統一介面。
  3. 自動登入 Token: 伺服器端發放長效 Refresh Token,客戶端僅儲存 Token (同樣需加密),避免儲存原始密碼。

常見坑點

  • QSettings 建構前未 QCoreApplication::setOrganizationName/ApplicationName → 寫入預設位置 (`HKEY_CURRENT_USER\Software\QtProject\...`),難以管理。
  • 同組織多應用共用設定 → 善用 beginGroup() 隔離。
  • 陣列/複雜型別:beginWriteArray/endArray、setValue 支援 `QVariant` 可序列化類型。

程式碼倉庫完整範例:Qt 官方 Settings 範例。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved