我在QGraphicsView中滚动时遇到问题。
我在QGraphicsView子类中设置了scene rect:
MyQGraphicsView::MyQGraphicsView{
setSceneRect(0,0,2000,2000)
}
并重载了paintEvent:
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中找到了几个关于滚动的主题,但没有一个能解决我的问题。
答案 0 :(得分:2)
QGraphicsView
继承QAbstractScrollArea
。因此,其内容显示在其内部窗口小部件中,可以使用viewport()
获取。如果要绘制某些内容并能够滚动它,则需要将事件过滤器附加到视口窗口小部件并处理其paintEvent,而不是视图的事件。
但你不应该为QGraphicsView
这样做。你正试图做一些非常错误的事情。你不应该重新实现QGraphicsView::paintEvent
只是为了画画!它完全贬低了它的优势。您需要使用QGraphicsScene
向视图中添加内容。