Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: qtkoder777 от Май 28, 2019, 12:52



Название: Не сохраняются открытые программно окна QDockWidget в QMainWindow
Отправлено: qtkoder777 от Май 28, 2019, 12:52
В главном окне несколько доквиджетов, которые пользователь открывает и закрывает.
Появилась необходимость сделать в программе 2 режима с разными наборами окон (надо программно открывать и закрывать доквиджеты из исходного набора).
Было сделано сохранение открытого набора окон при закрытии программы:
Код
C++ (Qt)
QSettings::setValue("/geometry", mainWindow->saveGeometry());
QSettings::setValue("/state", mainWindow->saveState());
Так вот, если окна открывались руками, то набор сохраняется.
А если открыть программно (dockWidget->setVisible), то результат после перезагрузки не видно.


Название: Re: Не сохраняются открытые программно окна QDockWidget в QMainWindow
Отправлено: Fregloin от Май 28, 2019, 17:23
Ну а где код загрузки сохраненных ранее параметров для окна?


Название: Re: Не сохраняются открытые программно окна QDockWidget в QMainWindow
Отправлено: qtkoder777 от Май 29, 2019, 09:07
Ну а где код загрузки сохраненных ранее параметров для окна?

Ну так аналогично
Код
C++ (Qt)
mainWindow->restoreGeometry(QSettings::value("geometry").toByteArray());
mainWindow->restoreState(QSettings::value("state").toByteArray());


Название: Re: Не сохраняются открытые программно окна QDockWidget в QMainWindow
Отправлено: lit-uriy от Май 30, 2019, 21:29
А Док виджеты создаются до или после восстановления настроек?


Название: Re: Не сохраняются открытые программно окна QDockWidget в QMainWindow
Отправлено: NoIdea от Июнь 07, 2019, 23:10
Сам периодически забываю, но когда создаёшь QDockWidget динамически, то чтобы сохранялось положение, необходимо установить имя объекта:
Код
C++ (Qt)
dockWidget->setObjectName("OhMyDock");

А для скрытия и отображения, наверное лучше всё же использовать специально для это имеющийся QAction:
Код
C++ (Qt)
dockWidget->toggleViewAction()->triggered(false);


Название: Re: Не сохраняются открытые программно окна QDockWidget в QMainWindow
Отправлено: Fregloin от Июль 29, 2019, 11:17
Да, имена точно надо устанавливать объектам, они потом фигурирует в кофигах/реестре.