在 QGraphicsView 中滚动
Posted
技术标签:
【中文标题】在 QGraphicsView 中滚动【英文标题】:Scrolling in QGraphicsView 【发布时间】:2013-06-17 07:01:21 【问题描述】:我时遇到问题。
我在 QGraphicsView 子类中设置了场景矩形:
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 中找到了几个关于滚动的主题,但没有一个能解决我的问题。
【问题讨论】:
【参考方案1】:QGraphicsView
继承 QAbstractScrollArea
。所以它的内容显示在它的内部小部件中,可以使用viewport()
获取。如果你想绘制一些东西并能够滚动它,你需要将一个事件过滤器附加到视口小部件并处理它的paintEvent,而不是视图的事件。
但您不应该为QGraphicsView
这样做。你正试图做一些非常错误的事情。您不应该仅仅为了绘画而重新实现QGraphicsView::paintEvent
!它完全贬低了它的优势。您需要使用QGraphicsScene
向视图添加内容。
【讨论】:
以上是关于在 QGraphicsView 中滚动的主要内容,如果未能解决你的问题,请参考以下文章
滚动 QGraphicsView 和 QGraphicsScene