Qt 视图框架QGraphicsItem
admin
2024-02-01 02:25:21

视图框架的一部分,为绘制你自己的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这样的矩形,线性映射的示意图如下:

CSDN QT学习资料:Qt开发必备技术栈学习路线和资料

 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();//提供一条线的item8 QGraphicsRectItem *pTo = new QGraphicsRectItem();//提供一个矩形item9 
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);

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

相关内容

热门资讯

原创 用... 毫无疑问,AI应用的全面爆发正以前所未有的力量推动算力需求呈指数级增长。在这一浪潮中,智算中心作为算...
投资者提问:请问公司筹备中的机... 投资者提问:请问公司筹备中的机器人业务是华阳精机负责吗?是否涉及到精密压铸以外的产品线?董秘回答(华...
华阳集团:子公司与紫光展锐签协... 投资者提问:关注到公司子公司华阳通用已与紫光展锐签署战略合作协议,请详细讲解下合作前景、领域及具体项...
过去一年 美国削减450亿美元... 本文转自【央视新闻客户端】;据乌克兰方面当地时间23日消息,过去一年里,美国削减了450亿美元对乌支...
龙虎榜|上海港湾涨停,开源证券... 12月24日,上海港湾涨停,日振幅值达17.40%,日换手率达4.38%,收盘价56.27元,成交额...