Qt QGraphicsView QGraphicsScene QGraphicsItem什么时候用,有什么优点

画图可以在QWidget上重写paintEvent实现,但是设计形如PLC梯形图包含大量独立元件的场景时,使用paintEvent会变得复杂,不能直接操作元件给元件改变属性,需要繁琐处理鼠标事件来确定是对哪一个元件操作,缩放也要单独处理,因为梯形图比较长,还需要有QScrollArea的派生类作为QWidget的派生类的父层,当梯形图过大时,还需要对QScrollArea及QWidget做单独处理,使得滚动时只显示部分内容,否则会刷新过慢,这又给鼠标事件增加了复杂性。

结合使用QGraphicsView(视图) QGraphicsScene(场景) QGraphicsItem(项目)时:
1.不需要单独的QScrollArea派生类,QGraphics本身继承自QAbstractScrollArea
2.元件可以直接派生自QGraphicsItem(或QGraphicsObject),QGraphicsItem和QGraphicsObject都有鼠标事件,而QGraphicsObject还具有信号和槽以及源对象属性,不必使用传QWiget画图指针给元件对象画图这么繁琐。
3.不需要单独处理缩放功能,自带
4.非常大的场景显示时不存在刷新慢,卡顿的问题
5.QGraphicsItem可以通过设置z值来确定不用元件上下层的关系,实现图层效果
6.QGraphicsItem有父子关系,再结合z值,可以组合成复杂的元件,并可以对元件上的小item做单独的处理

要用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添加到了主窗口中,显示了热力图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值