QGraphicsView上的图层
Layers on QGraphicsView?
嗨,我正在制作一个应用程序,从WFS提取数据,然后在小部件的QGraphicsView
上显示这些数据层。目前,所有层都被渲染并添加到同一视图中,这意味着如果我想翻转其中的一层,就意味着重新渲染除该层之外的所有层。
目前,我正在将添加了椭圆项和多边形项的QGraphicsScene
添加到图形场景中。我想知道是否可以将多个场景添加到图形视图或将层添加到场景,或者允许我从复选框中隐藏/显示某些点/多边形,或者只隐藏层的东西?
我知道这有点含糊,但我很感激任何帮助。
谢谢。
您只需要一个QGraphicsScene
,但这里的关键是所有QGraphicsItem
和QGraphicsObject
都可以成为父级。
如果创建单个QGraphicsItem
或QGraphicsObject
作为父对象,则不需要绘制任何内容,但可以用作层项目的根。
因此,从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);
假设您创建了一个名为pScene
的指向QGraphicsScene
的指针:-
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就可以了。
当然,实际解决方案需要考虑许多细节和变化。
- 如何在千层面打印隐藏图层的输出
- 使用几何着色器的图层渲染似乎只输出图像数组的第一层
- 图层不会绘制另一个图层
- 在作为表后面图层的标签上绘图
- 在 caffe 中仅编译一个图层文件
- 如何在咖啡中提取图层的斑点信息?
- 如何在 c++ 中获取图层的顶部标签?
- 在 Cocos2D-X 中创建具有新成员的图层
- 面向对象的图层
- 跨多个图层的模板化类未知类型
- 如何从装饰项中删除图层
- 存储 SDL 渲染器的预定义图层
- X11 图层管理器
- QGraphicsView上的图层
- 图层下降和更新咖啡模型
- 错误:从类型为"图层"的表达式初始化类型"LineLayer&"的引用无效
- 如何结束模板图层
- 如何创建包含不同图层的 PDF 文件
- 我如何在cocos2d-x中获得相同场景中的其他图层?
- 在cocos2d-x中使用许多图层进行触摸处理