14

如何设置 QDockWidget 的初始宽度?

我已经实现了 sizeHint 函数,但是接下来呢?

4

2 回答 2

15

的文档QDockWidget说:

QDockWidget 充​​当其子部件的包装器,使用 setWidget() 设置。自定义尺寸提示、最小和最大尺寸以及尺寸策略应在子小部件中实现。QDockWidget 将尊重它们,调整自己的约束以包括框架和标题。不应在 QDockWidget 本身上设置大小约束,因为它们会根据它是否停靠而改变;停靠的 QDockWidget 没有框架和较小的标题栏。

因此,大小提示取自您在停靠小部件中放置的任何内容。您是否尝试过设置QDockWidget孩子的大小?

但是,我同意 Marius 的观点,最好的办法可能是QSettings在应用程序启动时使用它来保存和恢复所有停靠窗口的宽度。看看QMainWindow::saveState除了从单个函数而不是从单个函数获取数据saveState之外,我的保存函数看起来与 Marius 给出的函数非常相似。

于 2008-10-10T12:58:36.260 回答
6

如果您希望它具有与上次程序运行时相同的宽度,您应该查看设置。Qt 4.4 文档在此处提供了有关如何使用设置的示例。

这就是我的做法:

void Applicotion::readSettings() {
  QSettings settings("Company Name", "Application Name");
  settings.beginGroup("LibraryDock");
  libraryDock->setFloating(settings.value("docked").toBool());
  libraryDock->resize(settings.value("size", QSize(1, 1)).toSize());
  libraryDock->move(settings.value("pos", QPoint(200, 200)).toPoint());
  addDockWidget((Qt::DockWidgetArea)settings.value("dockarea", Qt::RightDockWidgetArea).toInt(), libraryDock);
  settings.endGroup();
}

void Applicotion::writeSettings() {
  QSettings settings("Company Name", "Application Name");
  settings.beginGroup("LibraryDock");
  settings.setValue("dockarea", dockWidgetArea(libraryDock));
  settings.setValue("docked", libraryDock->isFloating());
  settings.setValue("size", libraryDock->size());
  settings.setValue("pos", libraryDock->pos());
  settings.endGroup();

}

于 2008-10-10T12:46:16.457 回答