QGraphicsView上类似于分离层的功能



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

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

我尝试使用drawForeground方法来实现这一点。由于地图太大,我只画可见的区域。所以每次滚动完成时,我都需要update()。但这个结果有时会忽隐忽现。

我觉得最好采用分层的方法。

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

在顶部和左侧实现标尺的正确方法是从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);

这个解决方案最初是在这里提出的,效果非常好。结果是这样的。

我刚刚将图形视图的ViewportUpdateMode更改为FullViewportUpdate以避免闪烁。

您也可以使用SmartViewportUpdate来获得一些好的结果。

缺点是,在动画制作过程中,这需要更多的处理能力。

最新更新