繁体   English   中英

QGraphicsView 上的图层?

[英]Layers on QGraphicsView?

嗨,我正在制作一个从 WFS 中提取数据的应用程序,然后在小部件上的QGraphicsView上显示这些数据层。 目前所有图层都被渲染并添加到相同的视图中,这意味着如果我想转动它的一个图层意味着重新渲染除该图层之外的所有图层。

目前,我向图形场景添加了一个QGraphicsScene其中添加了椭圆项和多边形项。 我想知道是否可以将多个场景添加到图形视图中或将图层添加到场景中或允许我从复选框或仅隐藏图层的内容中隐藏/显示某些点/多边形的东西?

我知道这有点含糊,但我很感激任何帮助。

谢谢。

您只需要一个QGraphicsScene ,但这里的关键是所有QGraphicsItemQGraphicsObject都可以作为父级。

如果创建单个QGraphicsItemQGraphicsObject作为父对象,则不需要绘制任何内容,但可以用作图层项的根。

因此,从QGraphicsItem子类创建一个QGraphicsItemLayer类,该类不呈现任何内容,并添加与该QGraphicsItemLayer子层在同一层中所需的所有椭圆、多边形等。

当你想隐藏一个图层时,只需隐藏父QGraphicsItemLayer对象,它的所有子对象也将被隐藏。

-------- 编辑--------------

QGraphicsItem继承:-

class QGraphicsItemLayer : public QGraphicsItem
{
    public:
        virtual QRectF boundingRect()
        {
            return QRectF(0,0,0,0);
        }

        virtual void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *)
        {
        }
};

创建一个图层项目:

QGraphicsItemLayer* pLayer = new QGraphicsItemLayer;

将你想要的物体添加到图层中,注意pLayer是作为父级传递的

QGraphicsEllipseItem = new QGraphicsEllipseItem(pLayer);

假设您已经创建了QGraphicsScene并带有一个名为pScene的指针:-

pScene->addItem(pLayer);

然后当你想隐藏图层时

pLayer->hide();

或显示图层:-

pLayer->show();

另一种方法是QGraphicsItemGroup

就像是:

// Group all selected items together
QGraphicsItemGroup *group = scene->createItemGroup(scene->selecteditems());
...
// Destroy the group, and delete the group item
scene->destroyItemGroup(group);

因此,您可以将组视为一个图层,并且由于组也是QGraphicsItem具有所有功能,例如 show()/hide() 等。

更新:更改组的 Z-val 将允许您实现诸如“将图层移动到顶部/底部”之类的功能

我认为您可以尝试根据 z 值对对象进行分区:请参阅setZValue 然后引入层id和索引之间的映射。 一个简单的 QStringList 可以做到。

当然,实际解决方案需要考虑许多细节和变化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM