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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: (РЕШЕНО) Какая-то хрень при saveGeometry() у QWidget на QDialog  (Прочитано 10759 раз)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #15 : Апрель 22, 2015, 22:25 »

На самом деле, и то, и другое, но и ни то, ни другое. Поскольку в описании restoreGeometry() всё-таки есть слова Restores the geometry and state top-level widgets stored in the byte array geometry. Но это всё. Больше нигде ничего про то, что это только для виджетов "верхнего уровня", то есть, десктопных. Даже в развернутом описании "Restoring a Window's Geometry" не упоминается, что это не работает для дочерних виджетов. В результате - не только я этого не заметил, но также и все, кто читал эту ветку. Иначе указали бы - я в самом первом сообщении спросил, "может я чего-то пропустил?".

Если бы хотя бы было написано "Restores the geometry and state of only top-level widgets stored in the byte array geometry" - совсем другое дело. Я бы такое не пропустил.
Записан

2^7-1 == 127, задумайтесь...
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2094



Просмотр профиля
« Ответ #16 : Апрель 22, 2015, 22:30 »


Кто-нибудь еще на Qt 5.x в Виндах, Линухе? Для основательности багрепорта...

У меня выводит
QPoint(0,0)
QPoint(0,0)

Qt 5.2.1 (linux)
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #17 : Апрель 22, 2015, 22:50 »


Кто-нибудь еще на Qt 5.x в Виндах, Линухе? Для основательности багрепорта...

У меня выводит
QPoint(0,0)
QPoint(0,0)

Qt 5.2.1 (linux)

У Linux менеджер десктопа иначе рабочее пространство вычисляет. Впрочем, уже не актуально, проблема решена.
Записан

2^7-1 == 127, задумайтесь...
Bepec
Гость
« Ответ #18 : Апрель 22, 2015, 23:18 »

QPoint(0,0)
QPoint(0,0)
W7 x64 ну да написано всё у меня Веселый

QPoint(0,0)
QPoint(0,40)
c панелью задач вверху Улыбающийся

PS в принципе логика то понятна - сохраняет геометрию по отношению к экрану)  а не положение на форме Улыбающийся
« Последнее редактирование: Апрель 22, 2015, 23:29 от Bepec » Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #19 : Апрель 22, 2015, 23:44 »

QPoint(0,0)
QPoint(0,0)
W7 x64 ну да написано всё у меня Веселый

QPoint(0,0)
QPoint(0,40)
c панелью задач вверху Улыбающийся

PS в принципе логика то понятна - сохраняет геометрию по отношению к экрану)  а не положение на форме Улыбающийся

Да, так и должно быть для виджетов, у которых нет родителей - поэтому у меня все окна давно с этим работали. Но у виджетов, у которых есть виджеты-родители, функции move() и pos() работают уже в системе координат родителя, а не экрана. Соответственно, saveGeometry() тоже генерирует байтовый массив с координатами в системе родителя - я проверял, это именно так. Но restoreGeometry() при восстановлении на это чихает, и восстанавливает в координатах экрана. Хотя ничего не стоило бы загнать в байтовый массив geometry признак наличия родителя - и восстанавливать в его координатах, и выдавать true. Или выдавать false, если производится попытка восстановить такой виджет без привязки к родителю (но тем не менее, восстанавливать, мало ли...). И описать всё это в доке.

Представляю себе, как бы потом-потом было бы весело, если бы я сейчас разрабатывал на компьютере с тулбаром... внизу. Я бы глюк не словил, а потом на машинах с тулбаром вверху он был полез.  Грустный
« Последнее редактирование: Апрель 22, 2015, 23:46 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #20 : Апрель 23, 2015, 08:22 »

Igors, ваши 22 - это высота тулбара на вашем рабочем столе, причем он у вас наверху экрана находится. Так? Подмигивающий
Почти. Это высота меню бара который на Мac всегда вверху и 1 для всех приложений

В любом случае юзать save/restore для чайлд виджетов - неудачная затея, они для этого явно не предназначены. Сохранить просто geometry() и восстановить через setGeometry(). И то по-хорошему не нужно, должны быть лайауты
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #21 : Апрель 23, 2015, 16:16 »

В том то и дело, что недостаточно явно. Одного слова в руководстве для явности недостаточно. Теперь то да, когда посмотрел в исходник restoreGeometry() я просто geometry сохраняю.

Лэйауты в моём случае - это из пушки по воробьям. Может когда-нибудь и будет иметь смысл. Но нельзя всё делать сразу, потом будет не за что деньги брать.  Смеющийся

Баг в том, что saveGeometry() не учитывает параметры десктопа, а restoreGeometry() учитывает. Несимметрично работают. Напишу репорт...
Записан

2^7-1 == 127, задумайтесь...
PKEv
Гость
« Ответ #22 : Октябрь 07, 2015, 14:31 »

Похоже такая же ерунда:
https://github.com/tux3/qTox/issues/2349
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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