qt QGraphicsItem详解

一、概述

QGraphicsItem是Qt框架中图形视图框架(Graphics View Framework)的一个核心组件,它是用于表示2D图形元素的基类。

它支持的功能包括:

  • 设置和获取图形项的位置和尺寸。
  • 控制图形项的外观,如颜色、笔刷、边框等。
  • 处理图形项的交互事件,如鼠标点击、拖动等。
  • 实现图形项的碰撞检测、坐标转换等功能。

二、常用方法

  • QGraphicsItem(QGraphicsItem *parent = nullptr):构造函数,可以指定父项。
  • virtual QRectF boundingRect() const:必须由子类实现的纯虚函数,返回项的边界矩形。
  • virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr):必须由子类实现的纯虚函数,用于自定义项的渲染逻辑。
  • QPointF pos() const:返回项在其父项坐标系中的位置。
  • void setPos(const QPointF &pos):设置项在其父项坐标系中的位置。
  • QGraphicsItem *parentItem() const:返回项的父项。
  • QList<QGraphicsItem *> children() const:返回项的所有直接子项的列表。
  • virtual bool contains(const QPointF &point) const:如果指定的点在项的边界矩形内,则返回true。
  • virtual QPainterPath shape() const:返回项的形状路径,用于更精确的碰撞检测。
  • virtual bool collidesWithItem(const QGraphicsItem *other, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const:如果项与另一个项发生碰撞,则返回true。
  • virtual QVariant itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value):当项的属性即将发生变化时,会发出此信号。
  • setZValue(qreal z):设置z值
#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsItem>
#include <QPainter>

class CustomItem : public QGraphicsItem {
public:
    CustomItem() {}

    // 返回项的边界矩形
    QRectF boundingRect() const override {
        return QRectF(0, 0, 100, 100);
    }

    // 绘制项
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override {
        painter->setBrush(Qt::blue);
        painter->drawRect(boundingRect());
    }
};

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    QGraphicsScene scene;
    CustomItem *item = new CustomItem();
    scene.addItem(item); // 将自定义项添加到场景

    QGraphicsView view(&scene);
    view.setRenderHint(QPainter::Antialiasing);
    view.resize(400, 300);
    view.show();

    return app.exec();
}

qq群交流:698593923

觉得有帮助的话,打赏一下呗。。

           

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值