zoukankan      html  css  js  c++  java
  • Qt 视图框架QGraphicsItem

    视图框架的一部分,为绘制你自己的item提供了一个轻量级的窗口。支持很多特性,例如:鼠标、键盘事件、拖放、分组、碰撞检测等。

    通常在演示工具中使用分组,当用户想要将多个较小的 items 组合成一个大的 item 时,以简化 items 的移动和复制。

    QGraphicsItemGroup 是一种特殊类型的复合 item,将自身及其所有子项视为一个 item(即,其所有子项的所有事件和几何图形都被合并在一起)。

    QGraphicsItemGroup 的 boundingRect() 函数返回位于其中所有 items 的边界矩形。QGraphicsItemGroup 忽略其子项上的 ItemIgnoresTransformations 标记(即,相对于 QGraphicsItemGroup 的 geometry,子项被视为可变换的)。

    要构造一个 QGraphicsItemGroup,有两种方式:
    1、将一个 items 列表(例如:所有选择的 items)传递给 QGraphicsScene::createItemGroup(),它返回一个新的 QGraphicsItemGroup(最简单、最常见的方式)。
    2、手动构造一个 QGraphicsItemGroup,使用 QGraphicsScene::addItem() 将其添加到场景中,然后通过调用 addToGroup() 为 group 手动添加 item,一次只能添加一个。
    左上角为(0, 0)点,宽400,高300这样的矩形,线性映射的示意图如下:

     1 setWindow(-50, -50, 100, 100)
     2 
     3 this->resize(300, 200);
     4 // 构造 group、椭圆、直线、矩形
     5 QGraphicsItemGroup *pGroup = new QGraphicsItemGroup();
     6 QGraphicsEllipseItem *pFrom = new QGraphicsEllipseItem();//提供一个椭圆item   
     7 QGraphicsLineItem *pLink = new QGraphicsLineItem();//提供一条线的item
     8 QGraphicsRectItem *pTo = new QGraphicsRectItem();//提供一个矩形item
     9 
    10 // 设置 group 可选中、可移动
    11 pGroup->setFlags( QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsMovable);
    12 
    13 // 设置样式(画笔 - 边框色 画刷 - 背景色)
    14 QPen pen = pFrom->pen();
    15 pen.setWidth(2);
    16 pen.setColor(QColor(0, 160, 230));
    17 pFrom->setPen(pen);
    18 pLink->setPen(pen);
    19 pTo->setPen(pen);
    20 pFrom->setBrush(QColor(247, 160, 57));
    21 pTo->setBrush(QColor(247, 160, 57));
    22 
    23 // 将 item 添加至 group
    24 pGroup->addToGroup(pFrom);
    25 pGroup->addToGroup(pTo);
    26 pGroup->addToGroup(pLink);
    27 
    28 // 设置椭圆、矩形区域
    29 const double length = 50;
    30 pFrom->setRect(QRectF(-length/2.0, -length/2.0, length, length));
    31 pTo->setRect(QRectF(-length/2.0, -length/2.0, length, length));
    32 
    33 // 设置椭圆、矩形、连接线坐标
    34 pFrom->setPos(80, 80);
    35 pTo->setPos(200, 150);
    36 pLink->setLine(QLineF(pFrom->pos(), pTo->pos()));
    37 
    38 // 将 group 添加至场景中
    39 QGraphicsScene *pScene = new QGraphicsScene();
    40 pScene->setSceneRect(0, 0, 300, 200);
    41 pScene->addItem(pGroup);
    42 
    43 // 为视图设置场景
    44 QGraphicsView *pView = new QGraphicsView(this);
    45 pView->setRenderHint(QPainter::Antialiasing);
    46 pView->setScene(pScene);
  • 相关阅读:
    linux du 显示目录下的各个子目录的大小
    恢复误删的procedure
    查看oracle 启动了多久
    linunx 定位最耗资源的进程
    oracle编译 失效对象方式
    oracle查询最占用资源的查询
    Android学习笔记(三)之带有侧边索引的快速查找(跟带字母索引查找的通讯录差不多)
    ScrollView中ViewPager无法正常滑动问题
    ScrollView中ViewPager无法正常滑动问题
    Android学习笔记(二)之异步加载图片
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/13517903.html
Copyright © 2011-2022 走看看