Я использую QT и пытаюсь построить график с QGraphicsView и QGraphicsScene. Я не хочу никаких дополнительных зависимостей, поэтому я не использую QWT. Когда я строю свои данные, в данный момент я использую
scene->drawLine(x1,y1,x2,y2,pen);
тогда это рисует линию между двумя точками в QGraphicScene. Но для этого используется верхняя левая система x = 0 y = 0 … я хотел бы использовать свою собственную систему, как показано на рисунке ниже. Другая проблема заключается в том, что у меня есть двойные значения от -3 до + 3.. Кто-нибудь имеет некоторый опыт работы с QGraphicScene и QGraphicsView и может сказать мне, как я могу это сделать?
Попробуйте заглянуть в 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» — нижнюю.
Других решений пока нет …