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