1

在我的QGraphicsView中,我显示了一张地图。我需要在上边缘和左边缘分别显示水平标尺和垂直标尺。

地图需要滚动,但上述标尺应显示在其固定位置,但更改其比例值。

我试图实现这个使用drawForeground方法。由于地图尺寸较大,我只绘制可见区域。所以我需要update()每次滚动完成。但这个结果有时会闪烁。

我觉得最好有类似的方法。

解决问题的最佳方法是什么?

4

2 回答 2

2

实现上下左右标尺的正确方法是从QGraphicsView派生出来,然后在构造函数中调用:

// add two rulers on top and left.
setViewportMargins(20, 20, 0, 0);

// add grid layout
QGridLayout* gridLayout = new QGridLayout();
gridLayout->setSpacing(0);
gridLayout->setMargin(0);

// create rulers
hRuler = new Ruler(Qt::Horizontal);
vRuler = new Ruler(Qt::Vertical);

// add items to grid layout
QWidget* corner = new QWidget();
corner->setBackgroundRole(QPalette::Window);
corner->setFixedSize(20, 20);
gridLayout->addWidget(corner, 0, 0);
gridLayout->addWidget(hRuler, 0, 1);
gridLayout->addWidget(vRuler, 1, 0);
gridLayout->addWidget(viewport(), 1, 1);

// finally set layout
setLayout(gridLayout);

该解决方案最初是在此处介绍的,并且效果很好。结果看起来像这样

于 2013-12-05T10:04:15.007 回答
0

我只是将图形视图的 ViewportUpdateMode 更改为 FullViewportUpdate 以摆脱闪烁。

您也可以使用 SmartViewportUpdate 获得不错的结果。

缺点是,在动画期间,这需要更多的处理能力。

于 2012-04-06T02:57:36.117 回答