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

Nya*_*uko 2 c++ qt

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

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

根据 QMainWindow::save/restoreState 的文档,我似乎可以使用以下函数直接保存/恢复扩展窗口小部件:

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();
}
Run Code Online (Sandbox Code Playgroud)

但是我怎样才能获得指向恢复的码头小部件的指针呢?就像指针 ShapesDockWidget 一样?

vah*_*cho 5

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

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

class MainWindow : public QMainWindow
{
[..]
private:
    QDockWidget *shapesDockWidget;
};
Run Code Online (Sandbox Code Playgroud)

并在创建停靠窗口实例时使用该变量:

shapesDockWidget = new QDockWidget(tr("Shapes"));
Run Code Online (Sandbox Code Playgroud)