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

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

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

Ответы

Ответ 1

В документации для QDockWidget указано:

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

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

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

Ответ 2

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

}