Начальная ширина 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();
}