当前位置: 首页 > news >正文

qt的QMainWindow保存窗口和恢复窗口状态

保存窗口状态

QSettings settings("MyCompany", "MyApp"); // 指定存储的应用信息
settings.setValue("mainWindowState", saveState());
  • saveState() 返回一个 QByteArray,包含 所有停靠窗口和工具栏的状态
  • QSettings 用于存储数据,应用下次启动时可以恢复

 

恢复窗口状态

QSettings settings("MyCompany", "MyApp");
restoreState(settings.value("mainWindowState").toByteArray());

restoreState() 需要传入 QByteArray,它会自动恢复所有停靠窗口和工具栏的状态。 

完整示例

#include <QApplication>
#include <QMainWindow>
#include <QDockWidget>
#include <QTextEdit>
#include <QSettings>
#include <QToolBar>
#include <QAction>

class MainWindow : public QMainWindow {
public:
    MainWindow() {
        setWindowTitle("QMainWindow Save/Restore Example");

        // 添加一个主编辑器
        QTextEdit *editor = new QTextEdit;
        setCentralWidget(editor);

        // 创建工具栏
        QToolBar *toolBar = addToolBar("Main Toolbar");
        QAction *action = new QAction("Test Action", this);
        toolBar->addAction(action);

        // 创建可停靠窗口
        QDockWidget *dock = new QDockWidget("Dock Window", this);
        QTextEdit *dockText = new QTextEdit;
        dock->setWidget(dockText);
        addDockWidget(Qt::LeftDockWidgetArea, dock);

        // 恢复状态
        restoreSettings();
    }

    void closeEvent(QCloseEvent *event) override {
        saveSettings();
        QMainWindow::closeEvent(event);
    }

private:
    void saveSettings() {
        QSettings settings("MyCompany", "MyApp");
        settings.setValue("mainWindowState", saveState());
        settings.setValue("mainWindowGeometry", saveGeometry());
    }

    void restoreSettings() {
        QSettings settings("MyCompany", "MyApp");
        restoreGeometry(settings.value("mainWindowGeometry").toByteArray());
        restoreState(settings.value("mainWindowState").toByteArray());
    }
};

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    MainWindow mainWindow;
    mainWindow.show();
    return app.exec();
}

(1) saveState()restoreState()

  • saveState() 会存储:
    • 所有 QDockWidget 的位置、大小、停靠状态(浮动/嵌入)。
    • 所有 QToolBar 的状态(是否可见,位置)。
  • restoreState() 会根据存储的数据还原所有 UI 组件的位置和状态

(2) saveGeometry()restoreGeometry()

存储/恢复窗口大小和位置,通常配合 saveState() 使用

settings.setValue("mainWindowGeometry", saveGeometry());
restoreGeometry(settings.value("mainWindowGeometry").toByteArray());

QSettings 的作用

  • QSettings 用于存储 应用数据,默认会在系统对应的 注册表 / 配置文件 里存储:
    • Windows: HKEY_CURRENT_USER\Software\MyCompany\MyApp
    • Linux/macOS: ~/.config/MyCompany/MyApp.conf
  • 这样即使应用关闭,下次启动时仍能恢复窗口状态。

 

相关文章:

  • 《Stable Diffusion绘画完全指南:从入门到精通的Prompt设计艺术》 第一章
  • HCIA-路由器相关知识和面试问题
  • 《Performance Analysisi and Tuning on Modern CPU》阅读笔记
  • deepin linux UOS AI 使用 deepseek-r1 30B
  • git如何把多个commit合成一个
  • Jenkins 部署 之 Mac 一
  • 1 推荐系统概述
  • 【数据结构】(8) 二叉树
  • ES 索引结构
  • 优选驾考小程序
  • 如何优化数据库Update锁竞争
  • 直接调字典控制器传字典名称和字典Value查具体的字典Label
  • 【算法】动态规划专题⑫ —— 环形区间DP python
  • Flutter Gradle 命令式插件正式移除,你迁移旧版 Gradle 配置了吗?
  • 轻松打造专属音乐库:Alger Music本地部署与远程访问全流程解析
  • SQL 大厂面试题目(由浅入深)
  • 线性回归计算斜率原理及C++实现
  • OOM异常排除
  • 【DeepSeek】在本地计算机上部署DeepSeek-R1大模型实战(完整版)
  • IBM服务器刀箱Blade安装Hyper-V Server 2019 操作系统
  • 北邮今年本科招生将首次突破四千人,新增低空技术与工程专业
  • 新华时评:博物馆正以可亲可近替代“高冷范儿”
  • 技术派|威胁F-35、击落“死神”,胡塞武装防空战力如何?
  • 网易有道一季度净利润同比增长247%:有能力在今年实现更强劲的利润增长
  • 王东杰评《国家与学术》︱不“国”不“故”的“国学”
  • 机构发布“2025中国高职院校排名”