QT График, как изменить систему координат / геометрию QGraphicsView

Я использую QT и пытаюсь построить график с QGraphicsView и QGraphicsScene. Я не хочу никаких дополнительных зависимостей, поэтому я не использую QWT. Когда я строю свои данные, в данный момент я использую

scene->drawLine(x1,y1,x2,y2,pen);

тогда это рисует линию между двумя точками в QGraphicScene. Но для этого используется верхняя левая система x = 0 y = 0 … я хотел бы использовать свою собственную систему, как показано на рисунке ниже. Другая проблема заключается в том, что у меня есть двойные значения от -3 до + 3.. Кто-нибудь имеет некоторый опыт работы с QGraphicScene и QGraphicsView и может сказать мне, как я могу это сделать?

введите описание изображения здесь

3

Решение

Попробуйте заглянуть в QGraphicsView :: SetTransform. Эта матрица определяет, как «координаты сцены» переводятся в «координаты вида», это обычное понятие в графическом программировании.

Существуют также вспомогательные функции scale (), rotate (), translate () и shear (), которые изменяют текущую матрицу преобразования представления.

Так что вы можете сделать что-то вроде этого:

scale(1.0, -1.0); // invert Y axis

// translate to account for fact that Y coordinates start at -3
translate(0.0, 3.0);

// scale Y coordinates to height of widget
scale(1.0, (qreal)viewport()->size().height()/6.0);

А поскольку это зависит от размера виджета, вы также можете перехватить любые события изменения размера и снова сбросить матрицу преобразования. Предполагая, что вы хотите, чтобы «3» представляло верхнюю часть области просмотра, а «-3» — нижнюю.

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]