欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > qt的QMainWindow保存窗口和恢复窗口状态

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

2025/2/20 17:18:46 来源:https://blog.csdn.net/qq_43361844/article/details/145619542  浏览:    关键词: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
  • 这样即使应用关闭,下次启动时仍能恢复窗口状态。

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词