Russian Qt Forum
Ноябрь 17, 2019, 11:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не сохраняются открытые программно окна QDockWidget в QMainWindow  (Прочитано 1318 раз)
qtkoder777
Самовар
**
Offline Offline

Сообщений: 118


Просмотр профиля
« : Май 28, 2019, 12:52 »

В главном окне несколько доквиджетов, которые пользователь открывает и закрывает.
Появилась необходимость сделать в программе 2 режима с разными наборами окон (надо программно открывать и закрывать доквиджеты из исходного набора).
Было сделано сохранение открытого набора окон при закрытии программы:
Код
C++ (Qt)
QSettings::setValue("/geometry", mainWindow->saveGeometry());
QSettings::setValue("/state", mainWindow->saveState());
Так вот, если окна открывались руками, то набор сохраняется.
А если открыть программно (dockWidget->setVisible), то результат после перезагрузки не видно.
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1013


Просмотр профиля
« Ответ #1 : Май 28, 2019, 17:23 »

Ну а где код загрузки сохраненных ранее параметров для окна?
Записан
qtkoder777
Самовар
**
Offline Offline

Сообщений: 118


Просмотр профиля
« Ответ #2 : Май 29, 2019, 09:07 »

Ну а где код загрузки сохраненных ранее параметров для окна?

Ну так аналогично
Код
C++ (Qt)
mainWindow->restoreGeometry(QSettings::value("geometry").toByteArray());
mainWindow->restoreState(QSettings::value("state").toByteArray());
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3872


Просмотр профиля WWW
« Ответ #3 : Май 30, 2019, 21:29 »

А Док виджеты создаются до или после восстановления настроек?
Записан

Юра.
NoIdea
Новичок

Offline Offline

Сообщений: 11


Просмотр профиля
« Ответ #4 : Июнь 07, 2019, 23:10 »

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

А для скрытия и отображения, наверное лучше всё же использовать специально для это имеющийся QAction:
Код
C++ (Qt)
dockWidget->toggleViewAction()->triggered(false);
« Последнее редактирование: Июнь 10, 2019, 18:55 от NoIdea » Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1013


Просмотр профиля
« Ответ #5 : Июль 29, 2019, 11:17 »

Да, имена точно надо устанавливать объектам, они потом фигурирует в кофигах/реестре.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.118 секунд. Запросов: 23.