QDockWidget начальная ширина

Как мне установить начальную ширину QDockWidget?

Я реализовал функцию sizeHint, но что дальше?

2 ответа

Решение

Документация для QDockWidget говорит:

QDockWidget действует как оболочка для своего дочернего виджета, установленного с помощью setWidget(). Настраиваемые подсказки размеров, минимальные и максимальные размеры и политики размеров должны быть реализованы в дочернем виджете. QDockWidget будет уважать их, настраивая свои собственные ограничения, чтобы включить фрейм и заголовок. Ограничения размера не должны быть установлены на самом QDockWidget, потому что они меняются в зависимости от того, установлена ​​ли она на док-станцию; закрепленный QDockWidget не имеет рамки и меньшей строки заголовка.

Таким образом, подсказка о размере берется из того, что вы вставили в виджет-док. Вы пытались установить размер QDockWidgetребенок?

Но, я согласен с Мариусом, лучше всего использовать QSettings сохранить и восстановить ширину всех окон док-станции при запуске приложения. Посмотри на QMainWindow::saveState Помимо получения данных от saveState В отличие от отдельных функций, моя функция сохранения выглядит очень похоже на ту, которую дал Мариус.

Если вы хотите, чтобы он был такой же ширины, как и в прошлый раз, когда программа работала, вам следует заглянуть в настройки. Документация 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();

}

Другие вопросы по тегам