Qt保存窗口上次的尺寸,通用简单的配置类

1,简介

项目里常常需要把用户调整的各种窗口尺寸保存,下次打开同样的窗口时自动应用上次设定。

这里提供一个简单的配置类写法,根据窗口类名自动写对应配置,调用起来非常方便。

效果:

2,配置类代码

ConfigMgr.h:

#ifndef ConfigMgr_H
#define ConfigMgr_H

#include <QString>
#include <QWidget>


//单实例配置类
class ConfigMgr
{
public:
    static ConfigMgr* Instance(){
        static ConfigMgr m;
        return &m;
    }

	void SaveWindowSize(QWidget* pWnd);
	void LoadWindowSize(QWidget* pWnd);

private:
    ConfigMgr();
	
public:
    QString mIniPath;

};

#endif

ConfigMgr.cpp:

#include "ConfigMgr.h"
#include <QSettings>
#include <QCoreApplication>


ConfigMgr::ConfigMgr()
{
    mIniPath = QCoreApplication::applicationDirPath() + "/config.ini";
}

void ConfigMgr::SaveWindowSize(QWidget* pWnd)
{
    //获取窗口类名,建立对应配置
	QString className = pWnd->metaObject()->className();

    QSettings s(mIniPath, QSettings::IniFormat);
	s.setValue(QString("/%1/width").arg(className), pWnd->width());
	s.setValue(QString("/%1/height").arg(className), pWnd->height());
}

void ConfigMgr::LoadWindowSize(QWidget* pWnd)
{
	QString className = pWnd->metaObject()->className();

    QSettings s(mIniPath, QSettings::IniFormat);
	int w = s.value(QString("/%1/width").arg(className), 0).toInt();
	int h = s.value(QString("/%1/height").arg(className), 0).toInt();

	if (w > 0 && h > 0)
	{
		pWnd->resize(w, h);
    }
}

3,调用示例

在MainWindow中,closeEvent() 调用SaveWindowSize,保存尺寸到配置文件

构造函数调用 LoadWindowSize,加载配置

#include "ConfigMgr.h"
#include "DlgA.h"
#include "DlgB.h"
#include "mainwindow.h"
#include "ui_mainwindow.h"


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);


    ConfigMgr::Instance()->LoadWindowSize(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::closeEvent(QCloseEvent *event)
{
    ConfigMgr::Instance()->SaveWindowSize(this);

    QMainWindow::closeEvent(event);
}

void MainWindow::on_btnA_clicked()
{
    DlgA dlg(this);
    dlg.exec();
}

void MainWindow::on_btnB_clicked()
{
    DlgB dlg(this);
    dlg.exec();
}

在对话框里面也类似:

构造函数Load, 所有关闭窗口的地方Save

#include "DlgA.h"
#include "ui_DlgA.h"
#include "ConfigMgr.h"


DlgA::DlgA(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::DlgA)
{
    ui->setupUi(this);

    ConfigMgr::Instance()->LoadWindowSize(this);
}

DlgA::~DlgA()
{
    delete ui;
}

void DlgA::closeEvent(QCloseEvent *event)
{

    ConfigMgr::Instance()->SaveWindowSize(this);
}

void DlgA::on_btnOK_clicked()
{
    ConfigMgr::Instance()->SaveWindowSize(this);

    accept();
}

void DlgA::on_btnCancel_clicked()
{
    ConfigMgr::Instance()->SaveWindowSize(this);

    reject();
}

3,Demo源码下载

链接:https://pan.baidu.com/s/1UPxv-BofOE13RulyJZanmg 
提取码:9qh2

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逆枫゛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值