在我的QGraphicsView
中,我显示了一张地图。我需要在上边缘和左边缘分别显示水平标尺和垂直标尺。
地图需要滚动,但上述标尺应显示在其固定位置,但更改其比例值。
我试图实现这个使用drawForeground
方法。由于地图尺寸较大,我只绘制可见区域。所以我需要update()
每次滚动完成。但这个结果有时会闪烁。
我觉得最好有类似的方法。
解决问题的最佳方法是什么?
在我的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 获得不错的结果。
缺点是,在动画期间,这需要更多的处理能力。