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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Лимит QGraphicsView::adjustSize() в 2/3 экрана - как обойти эту глупость?  (Прочитано 6440 раз)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

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


Просмотр профиля
« : Ноябрь 30, 2016, 21:43 »

Понадобилось менять размеры QGraphicsView так, чтобы отображались все айтемы в нём. Именно менять размеры окна, а не подгонять айтемы под окно. И мне кровь из носу надо, чтобы вид мог расти до размеров экрана. Есть вроде такая функция QGraphicsView::adjustSize(), всё работает как надо, кроме одного - с какого-то момента упирается в некое максимальное окно, которое даже меньше начального. При повторном прочтении описания обнаруживаю бредятину, которую изначально пропустил, поскольку она присутствует у QWidget, а не у самого QGraphicsView. Но QGraphicsView - это же тоже QWidget...

Цитировать
The maximum size of a window is 2/3 of the screen's width and height.

%@$#!%^@$#!!!!!..... аж дым из ушей пошёл... кто эту глупость там в Скандинавии придумал?!
От усталости (пашу с 9 утра, наваял кучу всякого) даже не могу сообразить как это обойти. Масштабировать самому руками не очень хочется - задание размеров в целых числах, а масштабирование дробное, в долях от 1. Может кто встречал, где это ограничение adjustSize() можно отключить? Я сам проверяю на размеры экрана. Если отключить - у меня будет то, что требуется.

PS причём эта скотина ограничивает не 2/3 (0.6666..), как обещано, а 0.75 по горизонтали и 0.7 по вертикали
« Последнее редактирование: Ноябрь 30, 2016, 21:56 от Гурман » Записан

2^7-1 == 127, задумайтесь...
ssoft
Программист
*****
Offline Offline

Сообщений: 579


Просмотр профиля
« Ответ #1 : Декабрь 01, 2016, 09:12 »

Может переопределить методы?

Код:
virtual QSize sizeHint() const;
virtual QSize minimumSizeHint() const;
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

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


Просмотр профиля
« Ответ #2 : Декабрь 01, 2016, 11:50 »

Может переопределить методы?

Код:
virtual QSize sizeHint() const;
virtual QSize minimumSizeHint() const;
Наследовать не хочется - я в дизайнере этот вид на окне размещаю. Значит надо из-за этой ерунды полноценный плагин соорудить, а от имеющегося отказаться. Promote скорее всего не заработает, он для расширения функций плагина, переопределение методов там не описано.
Записан

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

Сообщений: 1805



Просмотр профиля WWW
« Ответ #3 : Декабрь 01, 2016, 12:13 »

Может переопределить методы?

Код:
virtual QSize sizeHint() const;
virtual QSize minimumSizeHint() const;
Наследовать не хочется - я в дизайнере этот вид на окне размещаю. Значит надо из-за этой ерунды полноценный плагин соорудить, а от имеющегося отказаться. Promote скорее всего не заработает, он для расширения функций плагина, переопределение методов там не описано.

* В дизайнере можно указывать класс-наследник. Т.е. размещая просто QLabel вы указываете на его наследника и при генерации формы будет ваш класс подставляться.
* В дизайнере оставляете место под ваш виджет и в коде его добавляете
Записан

Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

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


Просмотр профиля
« Ответ #4 : Декабрь 01, 2016, 13:17 »

* В дизайнере можно указывать класс-наследник. Т.е. размещая просто QLabel вы указываете на его наследника и при генерации формы будет ваш класс подставляться.
Это promote так работает? Я им не пользовался пока. Можно попробовать.
Записан

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

Сообщений: 1805



Просмотр профиля WWW
« Ответ #5 : Декабрь 01, 2016, 14:30 »

* В дизайнере можно указывать класс-наследник. Т.е. размещая просто QLabel вы указываете на его наследника и при генерации формы будет ваш класс подставляться.
Это promote так работает? Я им не пользовался пока. Можно попробовать.

Не помню точно -- в контекстном меню виджета посмотреть Улыбающийся
Записан

Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

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


Просмотр профиля
« Ответ #6 : Декабрь 01, 2016, 19:20 »

А нихрена! В коде QWidget::adjustSize()

Код:
8170        s.setWidth(qMin(s.width(), screen.width()*2/3));
8171        s.setHeight(qMin(s.height(), screen.height()*2/3));

никаких обращений к sizeHint() - нет смысла возиться с его переопределением (хотя делать promote всё равно придётся, но по другим причинам).

Во дурдом...  Злой

Остаётся только самому написать adjustSize на основе оригинала без этой глупости.
« Последнее редактирование: Декабрь 01, 2016, 19:42 от Гурман » Записан

2^7-1 == 127, задумайтесь...
ssoft
Программист
*****
Offline Offline

Сообщений: 579


Просмотр профиля
« Ответ #7 : Декабрь 01, 2016, 20:31 »

Может вместо adjustSize свой метод написать?
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

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


Просмотр профиля
« Ответ #8 : Декабрь 01, 2016, 20:43 »

Может вместо adjustSize свой метод написать?

Ну так а это о чём?

Остаётся только самому написать adjustSize на основе оригинала без этой глупости.
Записан

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

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


Просмотр профиля
« Ответ #9 : Декабрь 05, 2016, 20:45 »

В общем, после расковыривания кода adjustSize(), стало очевидно, что эта функция легко заменяется на view->resize(view->size() * scaleFactor), где qreal scaleFactor число то же самое, которое используется для масштабирования всех видимых айтемов сцены. То есть,  
Код:
view->scale(scaleFactor);
view->resize(view->size() * scaleFactor);
масштабирует одновременно айтемы и вью, через который эти айтемы видны. То есть, делает то же самое, что adjustSize, но без странного ограничения по размеру экрана. Правда, надо заметить, что adjustSize() учитывает ещё наличие layout, но мне это не нужно. При желании можно учесть и его.

А вообще это полезно при обработке punch-жеста тач-скрина, поскольку там образуется именно нужный qreal scaleFactor.

Может ещё кому в будущем пригодится.
« Последнее редактирование: Декабрь 14, 2016, 13:21 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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