保存窗口状态
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
- Windows:
- 这样即使应用关闭,下次启动时仍能恢复窗口状态。