2013-06-17 4 views
1

QGraphicsView에서 스크롤하는 데 문제가 있습니다.QGraphicsView에서 스크롤

MyQGraphicsView::MyQGraphicsView{ 
    setSceneRect(0,0,2000,2000) 
} 

을 그리고 paintEvent를 오버로드 :

내를 QGraphicsView 서브 클래스에서 장면 RECT를 설정 한

void MyQGraphicsView::paintEvent(QPaintEvent *event){ 
    qDebug()<<"Paint event"; 
    QPainter painter(viewport()); 
    painter.setRenderHint(QPainter::Antialiasing); 
    paint(painter); 
} 
void MyQGraphicsView::paint(QPainter &painter){ 
    painter.setPen(Qt::NoPen); 
    painter.fillRect(QRect(0,0,200,200),Qt::gray); 
    painter.fillRect(QRect(500,500,1000,100),Qt::green); 
    painter.setPen(QPen(Qt::white,4,Qt::DashLine)); 
    painter.drawLine(QLine(0,35,200,35)); 
    painter.drawLine(QLine(0,165,200,165)); 
} 

내가 두 번째 사각형이 표시되지 스크롤하면. 창 크기를 조정하면됩니다. 스크롤하는 사각형이 유선 방식으로 확장 될 때도 마찬가지입니다.

이 경우 스크롤을 어떻게 구현해야합니까? QGraphicsView에서 스크롤하는 것에 관한 몇 가지 주제를 찾았지만 아무도 내 문제를 해결하지 못했습니다.

답변

2

QGraphicsViewQAbstractScrollArea을 상속합니다. 따라서 내용은 viewport()을 사용하여 얻을 수있는 내부 위젯에 표시됩니다. 무언가를 페인트하고 스크롤 할 수있게하려면 뷰포트 위젯에 이벤트 필터를 연결하고 뷰의 이벤트가 아닌 paintEvent를 처리해야합니다.

그러나 QGraphicsView에 대해서는이 작업을 수행하지 마십시오. 당신은 끔찍한 잘못을 저 지르려고 노력하고 있습니다. 뭔가를 칠하기 위해 QGraphicsView::paintEvent을 재 구현하면 안됩니다! 그것의 장점은 완전히 가치가 없습니다. 보기에 내용을 추가하려면 QGraphicsScene을 사용해야합니다.

관련 문제