在我的QGraphicsView
中,我会显示一张地图。我需要在上边缘和左边缘上分别显示水平标尺和垂直标尺。
地图需要滚动,但上面的标尺应显示在固定位置,但会更改其比例值。
我尝试使用drawForeground
方法实现此功能。由于地图大,我只绘制可见区域。每次滚动完成后我都需要update()
。但这个结果有时会闪烁。
我觉得最好有单独的图层方法。
解决问题的最佳方法是什么?
答案 0 :(得分: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);
此解决方案最初为presented here,效果非常好。结果looks like this。
答案 1 :(得分:0)
我刚刚将图形视图的ViewportUpdateMode更改为FullViewportUpdate以摆脱闪烁。
您也可以使用SmartViewportUpdate获得更好的效果。
缺点是,在动画期间,这需要更多的处理能力。