Qt图形视图框架:QGraphicsPixmapItem

一、描述

像素图图形项。

二、类型成员

QGraphicsPixmapItem::ShapeMode:此枚举描述了图形项如何计算它的形状和不透明区域。

  • QGraphicsPixmapItem::MaskShape:通过调用 QPixmap::mask() 确定形状。此形状仅包括像素图的不透明像素。 但是,由于形状更复杂,因此它可能比其他模式慢,并且使用更多内存。
  • QGraphicsPixmapItem::BoundingRectShape:形状根据像素图的轮廓来确定的。这是最快的形状模式,但它不考虑像素图上的任何透明区域。
  • QGraphicsPixmapItem::HeuristicMaskShape:形状是通过调用 QPixmap::createHeuristicMask() 确定的。 性能和内存消耗与 MaskShape 类似。

三、实用成员函数

1、QGraphicsPixmapItem(const QPixmap &pixmap, QGraphicsItem *parent = nullptr)

构造函数。

2、void setOffset(qreal x, qreal y)

设置偏移量。绘制像素图的左上角会加上此偏移量。

    QGraphicsPixmapItem *item = new QGraphicsPixmapItem;
    item->setPixmap(QPixmap(":/1.PNG"));
    gphs->addItem(item);

    item = new QGraphicsPixmapItem;
    item->setPixmap(QPixmap(":/1.PNG"));
    gphs->addItem(item);
    item->setPos(300,0);
    item->setOffset(50,250);

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
你可以使用 Qt图形视图框架 QGraphicsView 和 QGraphicsScene 来实现这个效果。具体步骤如下: 1. 创建一个 QWidget 窗口作为主窗口,用于显示视频。然后创建一个 QGraphicsView 窗口,作为图形编辑窗口。 ```cpp QWidget *mainWindow = new QWidget; QGraphicsView *graphicsView = new QGraphicsView(mainWindow); ``` 2. 创建一个 QGraphicsScene,并将其设置为 QGraphicsView 的场景。 ```cpp QGraphicsScene *scene = new QGraphicsScene; graphicsView->setScene(scene); ``` 3. 创建一个 QGraphicsPixmapItem,将视频帧作为它的 pixmap,并将其添加到 QGraphicsScene 中。 ```cpp QPixmap videoFrame = ...; // 获取视频帧 QGraphicsPixmapItem *videoItem = new QGraphicsPixmapItem(videoFrame); scene->addItem(videoItem); ``` 4. 创建一个 QWidget 窗口,作为图形编辑窗口的背景,并将其设置为透明。 ```cpp QWidget *backgroundWidget = new QWidget(graphicsView); backgroundWidget->setAutoFillBackground(false); backgroundWidget->setAttribute(Qt::WA_TranslucentBackground); ``` 5. 将需要编辑的图形元素添加到 QGraphicsScene 中。 ```cpp QGraphicsEllipseItem *ellipseItem = new QGraphicsEllipseItem(0, 0, 50, 50); scene->addItem(ellipseItem); ``` 6. 将图形编辑窗口的背景添加到 QGraphicsScene 中,并将其放置在视频帧上方。 ```cpp QGraphicsProxyWidget *proxyWidget = scene->addWidget(backgroundWidget); proxyWidget->setZValue(1); ``` 7. 将图形编辑窗口添加到主窗口中。 ```cpp QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(graphicsView); mainWindow->setLayout(layout); ``` 这样,你就可以在视频窗口上方附着一个可以编辑图形的透明窗口了。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值