图形视图(11):【类】QGraphicsItemGroup [官翻]

QGraphicsItemGroup 类

QGraphicsItemGroup类提供了一个容器,该容器将一组项目视为一个项目。

Header:#include < QGraphicsItemGroup >
qmake:QT += widgets
Inherits:QGraphicsItem
Inherited By:
Since:Qt 4.2

详述

QGraphicsItemGroup是复合项目的一种特殊类型,它将自身及其所有子项视为一个项(即,所有子项的所有事件和几何都合并在一起)。当用户希望将几个较小的项目分组为一个大项目时,通常在演示工具中使用项目组,以简化项目的移动和复制。

如果只需要将项目存储在其他项目中,则任何QGraphicsItem可以通过将合适的父级传递给setParentItem() 来实现。

QGraphicsItemGroup的boundingRect() 函数返回项目组中所有项目的边界矩形。 QGraphicsItemGroup忽略其子项上的ItemIgnoresTransformations标志(即,相对于组项的几何形状,将子项视为可变形的)。

有两种构造项目组的方法。最简单,最常见的方法是将项目列表(例如,所有选定的项目)传递给QGraphicsScene :: createItemGroup() ,后者将返回一个新的QGraphicsItemGroup项目。另一种方法是手动构造QGraphicsItemGroup项,将其添加到调用QGraphicsScene :: addItem() 的场景中,然后通过调用addToGroup() 一次将项手动添加到组中。要拆除(“取消分组”)项目组,可以调用QGraphicsScene :: destroyItemGroup() ,也可以通过调用removeFromGroup() 手动从该组中删除所有项目。

 // Group all selected items together
 QGraphicsItemGroup *group = scene->createItemGroup(scene->selecteditems());

 // Destroy the group, and delete the group item
 scene->destroyItemGroup(group);

与调用setParentItem() (仅保留子项的父项相对位置和转换)相反,添加和删除项的操作将保留项的场景相对位置和转换。
addtoGroup() 函数将目标项目重新添加到该项目组,从而保持项目相对于场景的位置和变换完整无缺。 从视觉上看,这意味着通过addToGroup() 添加的项目将由于此操作而保持完全不变,而不管该项目或组的当前位置或转换如何。 尽管商品的位置和矩阵可能会发生变化。
removeFromGroup() 函数的语义与setParentItem() 相似; 它将项目重定为项目组的父项目。 与addToGroup() 一样,项目的场景相对位置和变换保持不变。

参见QGraphicsItem和图形视图框架。

公共类型

enum anonymous

由virtual type()函数返回的值。

ConstantValueDescription
Type10图形组

公共函数

构造析构

  1. QGraphicsItemGroup(QGraphicsItem *parent = nullptr)
  2. virtual ~QGraphicsItemGroup()

添加删除项目

  1. void addToGroup(QGraphicsItem *item)
  2. void removeFromGroup(QGraphicsItem *item)

重写的公共函数

  1. virtual QRectF boundingRect() const override
  2. virtual bool isObscuredBy(const QGraphicsItem *item) const override
  3. virtual QPainterPath opaqueArea() const override
  4. virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override
  5. virtual int type() const override

演示代码

#include <QtWidgets>
class MyItemLine :public QGraphicsLineItem{
public:
    MyItemLine(qreal x,qreal y,qreal x1,qreal y1)
        :QGraphicsLineItem(x,y,x1,y1){};
    ~MyItemLine(){
        qDebug() << "~MyItemLine()";
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    a.setApplicationName ("图形框架");
    a.setFont(QFont("楷体"));

    QGraphicsView view;

    QGraphicsScene scene(-100,-100,200,200);
    scene.setBackgroundBrush (QBrush(qRgb (173,241,174)));
    QPen pen(qRgb (140,159,141));
    for (int i = -80; i < 100; i+=20) {
        scene.addLine (-100,i,100,i,pen);
        scene.addLine (i,-100,i,100,pen);
    }

    QGraphicsItemGroup xAxis;
    scene.addItem (&xAxis);

    xAxis.addToGroup (scene.addLine (-100,0,100,0));
    xAxis.addToGroup (scene.addLine (90,-10,100,-1));
    xAxis.addToGroup (scene.addLine (90, 10,100, 1));

    xAxis.setFlag (QGraphicsItem::ItemIsMovable);


    QGraphicsItemGroup yAxis;
    scene.addItem (&yAxis);
    yAxis.setFlag (QGraphicsItem::ItemIsMovable);

    yAxis.addToGroup (new MyItemLine(0,-100,0,100));
    yAxis.addToGroup (new MyItemLine(-1, 100,-10,90));
    yAxis.addToGroup (new MyItemLine(1 , 100, 10,90));

    QGraphicsLineItem li;
    li.setLine (-40,-30,65,40);
    pen.setColor (Qt::black);
    pen.setStyle (Qt::DashDotDotLine);
    pen.setWidthF (2);
    li.setPen (pen);
    li.setFlag (QGraphicsItem::ItemIsMovable);

    scene.addItem (&li);
    qDebug() << scene.children ();

    view.setScene (&scene);
    view.setRenderHint (QPainter::Antialiasing);
    view.setWindowFlag (Qt::WindowMinMaxButtonsHint,false);
    view.show ();

    return a.exec();
}
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值