Qt:通过 QMainWindow::save/restoreState 控制 DockWidgets?

Qt: control DockWidgets by QMainWindow::save/restoreState?

如果我有这样的停靠小部件:

QDockWidget *shapesDockWidget = new QDockWidget(tr("Shapes"));
shapesDockWidget->setObjectName("shapesDockWidget");
shapesDockWidget->setWidget(treeWidget);
addDockWidget(Qt::RightDockWidgetArea, shapesDockWidget);

按照 QMainWindow::save/restoreState 上的文档,似乎我可以直接 save/restore dockwidgets 通过使用像这样的函数:

void MainWindow::writeSettings()
{
    QSettings settings("Software Inc.", "Icon Editor");

    settings.beginGroup("mainWindow");
    settings.setValue("geometry", saveGeometry());
    settings.setValue("state", saveState());
    settings.endGroup();
}

void MainWindow::readSettings()
{
    QSettings settings("Software Inc.", "Icon Editor");

    settings.beginGroup("mainWindow");
    restoreGeometry(settings.value("geometry").toByteArray());
    restoreState(settings.value("state").toByteArray());
    settings.endGroup();
}

但是我怎样才能得到指向恢复的 dockwidgets 的指针呢?像指针 shapesDockWidget ?

获取小部件的指针与 saving/restoring 您的 GUI 状态无关。当您调用 saveState() 函数时,它会遍历所有组件并存储它们的坐标、方向等。当您调用 restoreState() 时,所有小部件 应该已经创建 让该函数调整它们的几何形状。

如果您需要获取扩展坞 window 的指针,只需将其作为成员变量存储在 class 中即可。所以定义为:

class MainWindow : public QMainWindow
{
[..]
private:
    QDockWidget *shapesDockWidget;
};

并在创建 dock 实例时使用该变量 window:

shapesDockWidget = new QDockWidget(tr("Shapes"));