QDockWidget的初始宽度

时间:2008-10-10 12:22:51

标签: c++ qt qdockwidget

如何设置QDockWidget的初始宽度?

我已经实现了sizeHint函数,但下一步是什么?

2 个答案:

答案 0 :(得分:15)

QDockWidget的文档说:

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

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

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

答案 1 :(得分:5)

如果您希望它与上次运行程序时的宽度相同,则应查看设置。 Qt 4.4文档中有一个关于如何使用设置here的示例。

我就是这样做的:

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();

}