2012-04-05 2 views
1

QGraphicsView에지도를 표시합니다. 상단 가장자리에 가로 눈금자와 세로 눈금자를 표시하고 왼쪽 가장자리를 정중하게 표시해야합니다.QGraphicsView의 기능과 같은 층 분리

지도를 스크롤해야하지만 위의 눈금자는 고정 된 위치에 표시해야하지만 눈금은 변경해야합니다.

drawForeground 메서드를 사용하여 구현하려고했습니다. 큰지도 때문에 나는 단지 보이는 영역을 칠한다. 스크롤을 할 때마다 update()이 필요합니다. 그러나이 결과는 때때로 깜박입니다.

접근 방식과는 별도로 레이어를 만드는 것이 가장 좋을 것이라고 생각합니다.

문제를 해결하는 가장 좋은 방법은 무엇입니까?

답변

0

깜박임에서 벗어나기 위해 그래픽보기의 ViewportUpdateMode를 FullViewportUpdate로 변경했습니다.

SmartViewportUpdate를 사용하면 다소 좋은 결과를 얻을 수 있습니다.

단점은 애니메이션 중에 더 많은 처리 능력이 필요하다는 것입니다.

2

위쪽과 왼쪽에 눈금자를 구현하는 올바른 방법은를 QGraphicsView에서 파생 한 다음 생성자에서 호출하는 것입니다 :

// add two rulers on top and left. 
setViewportMargins(20, 20, 0, 0); 

// add grid layout 
QGridLayout* gridLayout = new QGridLayout(); 
gridLayout->setSpacing(0); 
gridLayout->setMargin(0); 

// create rulers 
hRuler = new Ruler(Qt::Horizontal); 
vRuler = new Ruler(Qt::Vertical); 

// add items to grid layout 
QWidget* corner = new QWidget(); 
corner->setBackgroundRole(QPalette::Window); 
corner->setFixedSize(20, 20); 
gridLayout->addWidget(corner, 0, 0); 
gridLayout->addWidget(hRuler, 0, 1); 
gridLayout->addWidget(vRuler, 1, 0); 
gridLayout->addWidget(viewport(), 1, 1); 

// finally set layout 
setLayout(gridLayout); 

이 솔루션은 처음 presented here, 그리고 그것은 매우 작동 잘. 결과는 looks like this입니다.

관련 문제