c++ QDockWidget初始宽度

niwlg2el  于 2023-05-24  发布在  其他
关注(0)|答案(2)|浏览(206)

如何设置QDockWidget的初始宽度?
我已经实现了sizeHint函数,但接下来呢?

wnrlj8wa

wnrlj8wa1#

QDockWidget的文档说:
QDockWidget充当其子小部件的 Package 器,使用setWidget()设置。自定义大小提示、最小和最大大小以及大小策略应在子小部件中实现**。QDockWidget将尊重它们,调整自己的约束以包含框架和标题。不应在QDockWidget本身设置大小限制,因为大小限制会根据QDockWidget是否停靠而改变;停靠的QDockWidget没有框架和较小的标题栏。
所以大小提示是从你放在dock小部件中的任何东西中获取的。你试过设置QDockWidget的子进程的大小吗?
但是,我同意Marius的观点,最好的做法可能是在应用程序启动时使用QSettings保存和恢复所有停靠窗口的宽度。看看QMainWindow::saveState。
除了从saveState而不是从单个函数获取数据之外,我的保存函数看起来与Marius给出的函数非常相似。

w8f9ii69

w8f9ii692#

如果你想让它的宽度和上次程序运行时的宽度一样,你应该查看设置。Qt文档中有一个关于如何使用设置here的示例。
我是这样做的:

void Application::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 Application::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();
}

相关问题