1

我在 QGraphicsView 中滚动时遇到问题。

我在 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 中找到了几个关于滚动的主题,但没有一个能解决我的问题。

4

1 回答 1

2

QGraphicsView继承QAbstractScrollArea. 所以它的内容显示在它的内部小部件中,可以使用viewport(). 如果你想绘制一些东西并能够滚动它,你需要将一个事件过滤器附加到视口小部件并处理它的paintEvent,而不是视图的事件。

但是你不应该这样做QGraphicsView。你正试图做一些非常错误的事情。您不应该QGraphicsView::paintEvent仅仅为了绘画而重新实现!它完全贬低了它的优势。您需要使用QGraphicsScene向视图添加一些内容。

于 2013-06-17T07:07:05.283 回答