2017-03-03 8 views
0

나는 QPainter 변환을 설정하는 혼란을 겪었습니다. 나는 Qt 문서를 읽었지만 두뇌가 나아지고있다.QWidget/QPainter 논리 화면 좌표 변환

void MyWidget::paintEvent (QPaintEvent *) { 
    QPainter painter (this); 
    // ... 

논리 좌표로 설명되는 장면을 렌더링하고 싶습니다. 장면은 렌더링 될 사각형 인 "스테이지"를 포함합니다. 스테이지는 논리적 좌표로 지정됩니다. 뷰포트가 있어야 위젯은

  • 무대의 경계를 초과하지 않고 가능한 한 큰이며,
  • 무대와 공통의 센터가 (정확한 용어는?이다).

위의 상황에서 enter image description here

무대는 내가 변환을 설정 한 경우

QRectF stage_rect (QPointF(0.2,5.1), QPointF(6.5,1.9)); 

같은 것을 설명하고 전화를 할 것입니다

painter.drawText (1.2, 2.2, "abc"); 

가에 나타납니다 위에 표시된 위젯의 왼쪽 하단 - 논리 좌표가 위쪽으로 증가하고 전체 스테이지의 높이가 위젯에 표시되고 스테이지가 가로 세로로 자르기 (위젯이 너무 넓거나 짧을 수도 있지만 스테이지가 세로로 잘릴 수 있음).

창문을 무대에 단단히 고정 시키려면 QPainter에 어떤 변형을 적용해야합니까?

답변

1

Qt의 좌표계는 아래쪽에서 오른쪽으로 오히려 위아래로 오른쪽에서 오른쪽으로 향하게합니다. 이것은 원하는 것입니다. 그렇게하려면 변환의 Y 축척 비율을 -1로 설정하고 X 축척 비율을 1로 설정합니다. 그것은 Y 좌표를 뒤집지만 X는 뒤집을 것입니다. 그러나 당신이 그 변환을 화가에게 적용한다면, 당신은 텍스트가 뒤집어 질 것이라고 믿습니다. 대신 좌표를 변환 한 다음 변환 된 좌표를 페인터에 전달하는 것이 좋습니다.

+0

마지막 점에 추가하려면 : 설명 된 변환과 함께'QTransform' 객체를 사용하고'map()'메소드를 사용하여'QPointF' 값 등을 처리 할 수 ​​있습니다. –

+0

예, 그것을 지적 해 주셔서 감사합니다 . 우수한 지적. – goug