QDockWidget начальная ширина - PullRequest
14 голосов
/ 10 октября 2008

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

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

Ответы [ 2 ]

15 голосов
/ 10 октября 2008

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

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

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

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

5 голосов
/ 10 октября 2008

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

}

...