QGraphicsPixmapitem 항목의 사각형으로 작성된지도를 표시하고 있습니다 (각 항목은 하나의지도 타일을 나타냄). 내 맵이 매우 크기 때문에 (PNG 파일 약 30MB) QGraphicsView에서 사용자가 볼 수 있고 보이지 않을 때 언로드 할 때만 픽스맵을 필요할 때로드 할 수 있기를 원합니다.QGraphicsView의 보이는 장면 사각형을 얻는 방법?
보이는 장면 사각형을 파악할 수있는 방법이 있습니까?
QGraphicsPixmapitem 항목의 사각형으로 작성된지도를 표시하고 있습니다 (각 항목은 하나의지도 타일을 나타냄). 내 맵이 매우 크기 때문에 (PNG 파일 약 30MB) QGraphicsView에서 사용자가 볼 수 있고 보이지 않을 때 언로드 할 때만 픽스맵을 필요할 때로드 할 수 있기를 원합니다.QGraphicsView의 보이는 장면 사각형을 얻는 방법?
보이는 장면 사각형을 파악할 수있는 방법이 있습니까?
QGraphicsView는 QWidget :: geometry() 함수를 상속받습니다. 이를 사용하여 상위 위젯 내에서 위치와 크기를 결정할 수 있습니다. (생성자 바깥 쪽)
QGrapicsScene은 QGraphicsView보다 클 수 있습니다. 기본 QGraphicsView는 QGraphicsScene을 수용 할 수있는 가로 및 세로 스크롤 막대를 추가합니다. 난 당신이 같은 것을 할 싶습니다 상상 :
//create a QGraphicsScene (for this example *scene) that is the size of your entire map.
QGraphicsScene *scene=new QGraphicsScene(0,0,mapWidth,mapHeight);
//create a QGraphicsView* named view that is the size of your visible area
//I'm assuming visibleHeight and visibleWidth do not change (this is your viewing window)
QGraphicsView *view=new QGraphicsView(0,0,visibleWidth,visibleHeight);
view->setScene(scene);
사용자가
sceneMoved(int,int)
같은 일부 사용자 정의 신호를 트리거 장면의 x와 y 위치를 제어하게한다.
이
connect(this,SIGNAL(sceneMoved(int,int)),this,SLOT(drawScene(int,int)));
void SomeClass::drawScene(int newX, int newY){
//if you already have a pointer to the scene do this, or call
//QGraphicsView::scene();
int oldX=scene->geometry()->x();
int oldY=scene->geometry()->y();
//now that you have your oldX, oldY, newX, and newY, visibleWidth, visibleHeight
//you can determine what you need to redraw, what you need to delete, and what can stay
}
여전히에서는 if..else이 많이 있습니다,하지만 당신은 요점 : 당신이 장면을 다시 그리기 전에, 장면의 새로운 위치를 확인하기 위해 슬롯을 호출합니다. 가시 영역 크기만큼 맵을 사각형으로 분할하는 것이 좋습니다.
이 당신에게 눈에 보이는 장면 사각형 제공합니다 경우
sceneRect = graphicsView.mapToScene(graphicsView.rect()).boundingRect()
전단 또는 회전 변환이 당신에게 보이는 장면 영역의 경계 사각형을주는 선물이있다. 그러한 변환 (이동 또는 확대/축소 만)이없는 경우 반환 된 사각형은 정확한 장면 영역입니다.
이제 장면에 거대한 타일 맵을 효율적으로 표시하는 실제 문제가 있습니까? 백그라운드에서 타일을로드하고 Qt 프레임 워크가 가시 범위 밖에있는 큰 픽스맵에 대해 최적화되어 있지 않은지 먼저 평가합니다. 30MB는 너무 크게 들리지 않아서 메모리에 맞지 않습니다.
나는 이것이 당신이 찾고있는 것이라고 생각합니다 : http://stackoverflow.com/questions/1355446/get-visible-rectangle-of-qgraphicsview. –