在我的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来获得一些好的结果。
缺点是,在动画制作过程中,这需要更多的处理能力。