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

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

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


person Phil Hannent    schedule 10.10.2008    source источник


Ответы (2)


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

A QDockWidget acts as a wrapper for its child widget, set with setWidget(). Custom size hints, minimum and maximum sizes and size policies should be implemented in the child widget. QDockWidget will respect them, adjusting its own constraints to include the frame and title. Size constraints should not be set on the QDockWidget itself, because they change depending on wether it is docked; a docked QDockWidget has no frame and a smaller title bar.

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

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

person David Dibben    schedule 10.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();

}

person Marius    schedule 10.10.2008
comment
Если вы используете QMainWindow для хранения прикрепленных окон, гораздо проще использовать saveState и restoreState, которые сохраняют состояние всех виджетов и панелей инструментов. - person David Dibben; 10.10.2008