2016-09-30 4 views
1

Я использую рамки графического представления для добавления элементов во время выполнения в представление. предметы будут помещены один под другим, как в вертикальной компоновке.Позиция позиции позиции в QGraphicsView при изменении размера

Я всегда помещаю свой предмет в исходное положение сцены (10, 10). но при изменении размера представления маржа корректируется. как поддерживать одинаковый размер при каждом изменении размера окна просмотра?

я гугл и нашел

QTransform Matrix(1, 0, 0, 0, 1, 0, 0, 0, 1); 
Matrix.scale(width()/sceneRect().width(), height()/sceneRect().height()) 
setTransform(Matrix); 

помогает в восстановлении маржи, но она также сокращает элемент на основании высоты вида рациона.

Я всегда хотел поддерживать тот же размер элемента, даже виджет вида сжимается или расширяется. должна появиться полоса прокрутки.

ответ

1

QGraphicsView - это окно просмотра на сцену. Вы говорите о добавлении вещей в представление, которое не то, что вы делаете; вы добавляете их на сцену, а затем визуализируйте их. Может быть, вы уже это понимаете, но только для того, чтобы быть ясными.

Что я думаю, что вы хотите сделать, так это то, что при изменении размера представления вы хотите, чтобы соотношение между пикселями и местами оставалось постоянным, и вы хотите, чтобы начало представления «прилипало» к происхождению сцены , Вы указываете разницу, но нет такой вещи, встроенной в отношения сцены/взгляда, так что вам нужно поддерживать себя. Другими словами, вы создаете запас в сцене, просто не помещая там какие-либо предметы, а затем вам нужно перевести представление так, чтобы область поля внутри сцены всегда находилась в окне просмотра вида. Это вторая часть этого, я думаю, что у вас проблемы.

Что я предлагаю, так это то, что вы изучаете матрицу преобразования вида при изменении размера представления. Значения m11 и m22 представляют собой коэффициенты масштабирования, которые показывают, как пиксели представления сопоставляются с координатами сцены, а dx и dy - факторы трансляции, которые показывают вам взаимосвязь между происхождением представления и происхождением сцены.

+0

благодарит за ясный ответ. Да, я добавляю элемент только на сцену. скажем, координата места (0,0,1000,1000), я разместил элемент в QPoint (18,12), чтобы сохранить разницу в марже. но при изменении размера окна просмотра эти поля возрастают. строки кода, которые я добавил, помогут сохранить маржу, но также масштабируют элемент, но я должен игнорировать сокращение объекта. – Wagmare

+0

Мне нужно было бы написать код сам, чтобы быть абсолютно уверенным, но если вы изучите эти значения матрицы преобразования, я думаю, вы обнаружите, что хотите, чтобы масштабные коэффициенты (m11 и m22) оставались такими же, как вы изменяете размер представления. Я думаю, вам нужно подклассифицировать QGraphicsView и переопределить resizeEvent и там, сбросить масштабные коэффициенты QGraphicsView. – goug

+0

уверен, что я сделаю это goug .. спасибо вам большое. я буду обновлять в соответствии с вашими рекомендациями и отвечать на ваши вопросы. – Wagmare

Смежные вопросы