Название: Лимит QGraphicsView::adjustSize() в 2/3 экрана - как обойти эту глупость? Отправлено: Гурман от Ноябрь 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 по вертикали Название: Re: Лимит QGraphicsView::adjustSize() в 2/3 экрана - как обойти эту глупость? Отправлено: ssoft от Декабрь 01, 2016, 09:12 Может переопределить методы?
Код: virtual QSize sizeHint() const; Название: Re: Лимит QGraphicsView::adjustSize() в 2/3 экрана - как обойти эту глупость? Отправлено: Гурман от Декабрь 01, 2016, 11:50 Может переопределить методы? Наследовать не хочется - я в дизайнере этот вид на окне размещаю. Значит надо из-за этой ерунды полноценный плагин соорудить, а от имеющегося отказаться. Promote скорее всего не заработает, он для расширения функций плагина, переопределение методов там не описано.Код: virtual QSize sizeHint() const; Название: Re: Лимит QGraphicsView::adjustSize() в 2/3 экрана - как обойти эту глупость? Отправлено: gil9red от Декабрь 01, 2016, 12:13 Может переопределить методы? Наследовать не хочется - я в дизайнере этот вид на окне размещаю. Значит надо из-за этой ерунды полноценный плагин соорудить, а от имеющегося отказаться. Promote скорее всего не заработает, он для расширения функций плагина, переопределение методов там не описано.Код: virtual QSize sizeHint() const; * В дизайнере можно указывать класс-наследник. Т.е. размещая просто QLabel вы указываете на его наследника и при генерации формы будет ваш класс подставляться. * В дизайнере оставляете место под ваш виджет и в коде его добавляете Название: Re: Лимит QGraphicsView::adjustSize() в 2/3 экрана - как обойти эту глупость? Отправлено: Гурман от Декабрь 01, 2016, 13:17 * В дизайнере можно указывать класс-наследник. Т.е. размещая просто QLabel вы указываете на его наследника и при генерации формы будет ваш класс подставляться. Это promote так работает? Я им не пользовался пока. Можно попробовать.Название: Re: Лимит QGraphicsView::adjustSize() в 2/3 экрана - как обойти эту глупость? Отправлено: gil9red от Декабрь 01, 2016, 14:30 * В дизайнере можно указывать класс-наследник. Т.е. размещая просто QLabel вы указываете на его наследника и при генерации формы будет ваш класс подставляться. Это promote так работает? Я им не пользовался пока. Можно попробовать.Не помню точно -- в контекстном меню виджета посмотреть :) Название: Re: Лимит QGraphicsView::adjustSize() в 2/3 экрана - как обойти эту глупость? Отправлено: Гурман от Декабрь 01, 2016, 19:20 А нихрена! В коде QWidget::adjustSize()
Код: 8170 s.setWidth(qMin(s.width(), screen.width()*2/3)); никаких обращений к sizeHint() - нет смысла возиться с его переопределением (хотя делать promote всё равно придётся, но по другим причинам). Во дурдом... >:( Остаётся только самому написать adjustSize Название: Re: Лимит QGraphicsView::adjustSize() в 2/3 экрана - как обойти эту глупость? Отправлено: ssoft от Декабрь 01, 2016, 20:31 Может вместо adjustSize свой метод написать?
Название: Re: Лимит QGraphicsView::adjustSize() в 2/3 экрана - как обойти эту глупость? Отправлено: Гурман от Декабрь 01, 2016, 20:43 Может вместо adjustSize свой метод написать? Ну так а это о чём? Остаётся только самому написать adjustSize Название: Re: Лимит QGraphicsView::adjustSize() в 2/3 экрана - как обойти эту глупость? Отправлено: Гурман от Декабрь 05, 2016, 20:45 В общем, после расковыривания кода adjustSize(), стало очевидно, что эта функция легко заменяется на view->resize(view->size() * scaleFactor), где qreal scaleFactor число то же самое, которое используется для масштабирования всех видимых айтемов сцены. То есть,
Код: view->scale(scaleFactor); А вообще это полезно при обработке punch-жеста тач-скрина, поскольку там образуется именно нужный qreal scaleFactor. Может ещё кому в будущем пригодится. |