2013-05-20 3 views
3

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

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

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

enter image description here

ответ

6

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

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

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

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» внизу.

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