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

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

遵循QMainWindow::save / restoreState上的文档,似乎我可以使用以下功能直接保存/恢复dockwidget:
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();
}

但是,如何获得指向还原后的ockockwidgets的指针?像指针shapesDockWidget?

最佳答案

获取窗口小部件的指针与保存/恢复GUI状态无​​关。当您调用saveState()函数时,它将遍历所有组件并存储其坐标,方向等。当您调用restoreState()时,应该已经创建了所有小部件 ,以便该函数调整其几何形状。

如果需要获取停靠窗口的指针,只需将其存储为类中的成员变量即可。因此,将其定义为:

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

在创建停靠窗口的实例时使用该变量:
shapesDockWidget = new QDockWidget(tr("Shapes"));

关于c++ - Qt:通过QMainWindow::save/restoreState控制DockWidgets吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27940421/

10-10 00:40