Qt 實現ini文件寫入寫出封裝 例如:7天內不在彈出彈窗、是否記住登錄用戶名

需求:

  一個本地配置文件讀寫的封裝, 例如:7天內不在彈出彈窗、是否記住登錄用戶名

實現:
class SettingUtil : public QObject {
    Q_OBJECT
    Q_ENUMS(SettingKeys)
  public:
    enum SettingKeys {
        BackupTime = 0,
        RemberName = 1,
        Null = -1,
    };
  public:
    static SettingUtil *Instance();
    explicit SettingUtil() {}
    virtual ~SettingUtil();
    void Initial();
    void SetInfo(const SettingKeys &key, const QString &value);
    void GetInfo(const SettingKeys &key, QString &value);
    const QString GetInfo(const SettingKeys key);
  private:
    QPointer<QSettings> settings_;
    static SettingUtil *instance;
};
SettingUtil *SettingUtil::instance = nullptr;
SettingUtil *SettingUtil::Instance() {
    if (!instance) {
        static QMutex mutex;
        QMutexLocker locker(&mutex);
        if (!instance) {
            instance = new SettingUtil;
        }
    }
    return instance;
}



SettingUtil::~SettingUtil() {
    settings_->deleteLater();
}

void SettingUtil::Initial() {
    settings_ = new QSettings("./settings.ini", QSettings::IniFormat);
    QString rember_name = GetInfo(RemberName);
    if(rember_name.isEmpty()) {
        SetInfo(RemberName, "0");
    }
}

void SettingUtil::SetInfo(const SettingUtil::SettingKeys &key, const QString &value) {
    switch (key) {
        case 0:
            settings_->setValue("Backup_Time", value);
            break;
        case 1:
            settings_->setValue("Rember_Name", value);
            break;
        default:
            break;
    }
}

void SettingUtil::GetInfo(const SettingUtil::SettingKeys &key, QString &value) {
    value = GetInfo(key);
}

const QString SettingUtil::GetInfo(const SettingUtil::SettingKeys key) {
    QString value;
    switch (key) {
        case 0:
            value = settings_->value("Backup_Time").toString();
            break;
        case 1:
            value = settings_->value("Rember_Name").toString();
            break;
        default:
            break;
    }
    return value;
}
使用:

  軟件開始先初始化

SettingUtil::Instance()->Initial();

  是否記住用戶名

void LoginManager::event_Widget_LoginType(
    const qint32 &type, QString &str, const qint32 &isrember) {
    switch (type) {
        case GlobalEnum::RemberName: {
                if(isrember == 1) {
                    SettingUtil::Instance()->SetInfo(SettingUtil::RemberName, str);
                }   else if(isrember == 2) {
                    str = SettingUtil::Instance()->GetInfo(SettingUtil::RemberName);
                } else {
                    SettingUtil::Instance()->SetInfo(SettingUtil::RemberName, "noRember");
                }
            }
            break;

  7天不在彈出彈窗

    //壓縮備份數據
    bool result = true;
    result &= JlCompress::compressDir("./backup/session.bak", "./session");
    result &= JlCompress::compressDir("./backup/backup.bak", "./", false);
    SettingUtil::instance()->SetBackupTime(QDateTime::currentMSecsSinceEpoch());
    qDebug() << "backup result:" << result;
    emit SignalBackupFinish(result);
    start_flag_ = false;
    //檢查上一次備份數據庫時間
    qint64 last_backup_time = SettingUtil::instance()->GetBackupTime();
    if (QDateTime::currentDateTime().toMSecsSinceEpoch() - last_backup_time >
            1000l * 60 * 60 * 24 * 90) { //超過90天
        QMessageBox box;
        QCheckBox *check = new QCheckBox(QString(tr("%1天內不再提醒")).arg(90));
        box.setWindowTitle(tr("提示"));
        box.setText(tr("請及時備份數據庫"));
        box.addButton(QMessageBox::Ok);
        box.setCheckBox(check);
        box.exec();
        if (check->isChecked()) {
            SettingUtil::instance()->SetBackupTime(QDateTime::currentMSecsSinceEpoch());
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章