利用QGraphicsitem、QGraphicsView、QGraphicsScene绘制可以更改矩形大小、移动矩形、旋转矩形的功能

文章参考:

自定义QGraphicsItem的选择、缩放、移动、旋转_qt图元拖拽箭头_CathleenMouse的博客-CSDN博客文章目录前言一、效果展示1.添加选择图元2.拖拽移动图元3.旋转图元二、实现步骤1.自定义图元2.图元移动3.图元缩放总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、效果展示1.添加选择图元2.拖拽移动图元3.旋转图元二、实现步骤1.自定义图元对于自定义控件最重要的是需要实现boundingRect和pain_qt图元拖拽箭头https://blog.csdn.net/weixin_43493507/article/details/122120695?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169535375416800226561129%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=169535375416800226561129&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-18-122120695-null-null.142^v94^chatsearchT3_1&utm_term=QGraphicsItem&spm=1018.2226.3001.4187

前言:

利用QGraphicsItem管理单个的矩形属性,封装成单个的Item项,自行管理。

利用QGraphicsScene承载所有的QGraphicsItem项,也就是用作显示的功能。

利用QGraphicsView去显示QGraphicsScene画布的区域。

这样就可以做到层层区分单独的管理自己的那一部分功能。

QGraphicsItem

创建一个类继承这个类,构造一个QGraphicsRectItem,再利用QGraphicsItem的鼠标事件去管理这个RectItem,进行大小改变、图形移动、图形的旋转。

QGraphicsScene

在Scene上绘制自定义后的QGraphicsItem类图形,Scene图形的坐标系和Item的坐标系是分开的,他们是两个不同的坐标系。QGraphicsItem想要做到绕中心点旋转就需要每次在修改QGraphicsItem自身大小的时候保持把这个中心通过setPos()函数去完成修改。利用QTransForm完成旋转的动作,旋转后QGraphicsItem的坐标系也是跟随旋转的。

QGraphicsView

QGraphicsView用作显示一个固定大小的区域,也就是显示QGraphicsScene这个画布的显示区域,呈现画布的一块区域信息。简单的继承一些鼠标的事件就可以,然后完成对Scene画布拖拽移动查看、缩放画布的操作。

后续补充代码和示例ing...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要用QtQGraphicsSceneQGraphicsItemQGraphicsView绘制板块热力图,需要按照以下步骤进行: 1. 创建一个QGraphicsScene对象,用于管理图形项。 2. 创建一个QGraphicsView对象,将QGraphicsScene作为参数传递给它。 3. 创建一个QGraphicsItem对象,用于绘制热力图。 4. 在QGraphicsItem的paint()函数中,使用QPainter对象绘制热力图。 5. 将QGraphicsItem添加到QGraphicsScene中。 6. 将QGraphicsView添加到Qt应用程序的主窗口中。 下面是一个简单的代码示例,用于绘制一个矩形的热力图: ```cpp // 创建QGraphicsScene对象 QGraphicsScene* scene = new QGraphicsScene(this); // 创建QGraphicsView对象,并将QGraphicsScene作为参数传递给它 QGraphicsView* view = new QGraphicsView(scene, this); // 创建QGraphicsItem对象,用于绘制热力图 class HeatmapItem : public QGraphicsItem { public: HeatmapItem() : QGraphicsItem() {} QRectF boundingRect() const override { return QRectF(0, 0, 100, 100); } void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) override { Q_UNUSED(option) Q_UNUSED(widget) // 创建渐变色 QLinearGradient gradient(0, 0, 0, 100); gradient.setColorAt(0, QColor(255, 0, 0)); gradient.setColorAt(0.5, QColor(255, 255, 0)); gradient.setColorAt(1, QColor(0, 255, 0)); // 绘制矩形 painter->setBrush(gradient); painter->drawRect(boundingRect()); } }; HeatmapItem* heatmap = new HeatmapItem(); scene->addItem(heatmap); // 将QGraphicsView添加到主窗口中 view->setGeometry(0, 0, 300, 300); view->show(); ``` 在上面的示例中,我们使用QGraphicsItem绘制一个矩形的热力图,并将它添加到了QGraphicsScene中。然后,我们创建了一个QGraphicsView对象,并将QGraphicsScene作为参数传递给它。最后,我们将QGraphicsView添加到了主窗口中,显示了热力图。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值