【发布时间】:2016-01-28 21:54:08
【问题描述】:
我想以编程方式将场景向左/向右滚动,但我不确定如何正确执行此操作。请注意,我确实不想要(可见)滚动条。
我使用标准的QGraphicsView + QGraphicsScene + QGraphicsItem 设置。我已将其缩小到最低限度,场景中有一个 QGraphicsItem(QGraphicsRectItem)。
我已经设法通过这样设置我的视图来实现程序化滚动:
// view setup
view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
然后,在另一部分代码中:
// programmatic scrolling
QScrollBar* const sb = view->horizontalScrollBar();
sb->setRange(0, 1000); // some values for experimenting
sb->setValue(sb->value() + 100 or -100); // some increment for experimenting
这行得通,但是...滚动不可见的滚动条感觉不对。
我尝试了这种更直接的方法:
// programmatic scrolling - doesn't quite work
view->viewport()->scroll(100 or -100, 0); // some increment for experimenting
这段代码确实滚动,但是当矩形离开视图的左边缘时,我反转滚动方向(在对scroll()的调用中,增量从100更改为-100),未覆盖的部分矩形的不重绘。原因是这种情况下没有调用QGraphicsRectItem::paint()(使用滚动条方法时调用)。
那么,有没有办法让viewport()->scroll() 工作?或者其他一些实现程序化滚动的简单方法?或者人工滚动条方法只是要走的路?
【问题讨论】: