2016-09-30 2 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

답장을 보내 주셔서 감사합니다. 예, 항목을 장면에만 추가하고 있습니다. 장면 좌표가 (0010001000)이라고하면 여백 차이를 유지하기 위해 QPoint (18,12)에 항목을 배치했습니다. 하지만 뷰 윈도우의 크기를 조정하면 이러한 여백이 증가합니다. 내가 추가 한 코드 줄은 여백을 유지하는 데 도움이되지만 항목을 크기 조정하지만 항목 축소를 무시해야합니다. – Wagmare

+0

절대적으로 확실한 코드를 직접 작성해야하지만 이러한 변환 행렬 값을 검사하면 뷰의 크기를 조정할 때 축척 비율 (m11 및 m22)을 동일하게 유지하는 것이 좋습니다. QGraphicsView를 서브 클래스 화하고 resizeEvent를 재정의 (override)해야하고 거기에서 QGraphicsView 스케일 인자를 재설정해야한다고 생각합니다. – goug

+0

나는 그것을 goug 할 것이다. .. 너를 너무 많이 고마워. 귀하의 추천에 따라 업데이트하고 여기에 회신 해 드리겠습니다. – Wagmare