【QT学习】Graphics View框架(进阶篇)- 派生QGraphicsItem类创建自定义图元item

这篇具有很好参考价值的文章主要介绍了【QT学习】Graphics View框架(进阶篇)- 派生QGraphicsItem类创建自定义图元item。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 📢欢迎各位读者:点赞 👍 收藏 ⭐留言 📝
  • 📢博客主页:https://blog.csdn.net/qq_59134387😀
  • 📢原创不易,转载请标明出处;如有错误,敬请指正批评!💦
  • 📢我不去想是否能够成功,既然选择了远方,便只顾风雨兼程!✨


前言

   在上一篇《Graphics View框架(基础篇)- 图元、场景、视图》中,我们对图元、场景和视图进行了简单的介绍,并使用这个三个类的组合,在窗口中绘制一个矩形图元。
   本篇,我们将通过对QGraphicsItem类进行派生,创建自定义图元item并显示在窗口中。我们将以创建一张从文件读取的图片item为例进行分析。


一、实现效果

【QT学习】Graphics View框架(进阶篇)- 派生QGraphicsItem类创建自定义图元item

二、实现流程

1.创建继承基类QGraphicsItem的派生类myItem

【QT学习】Graphics View框架(进阶篇)- 派生QGraphicsItem类创建自定义图元item
【QT学习】Graphics View框架(进阶篇)- 派生QGraphicsItem类创建自定义图元item
【QT学习】Graphics View框架(进阶篇)- 派生QGraphicsItem类创建自定义图元item

2.重新配置生成的头文件

(1)在类中添加头文件QGraphicsItem

  【QT学习】Graphics View框架(进阶篇)- 派生QGraphicsItem类创建自定义图元item
(2)重写生成的customItem类

  【QT学习】Graphics View框架(进阶篇)- 派生QGraphicsItem类创建自定义图元item

  【QT学习】Graphics View框架(进阶篇)- 派生QGraphicsItem类创建自定义图元item
(3)重写后的customItem类

  【QT学习】Graphics View框架(进阶篇)- 派生QGraphicsItem类创建自定义图元item

重写customItem类:使其继承QObject类,这样才能在该类中使用connect函数连接信号和槽。

(4)重新执行qmake(重要!重要!重要!),否则编译会报错error: undefined reference to `vtable for

  【QT学习】Graphics View框架(进阶篇)- 派生QGraphicsItem类创建自定义图元item

3.在类中使用QPixmap创建图片对象并加载

【QT学习】Graphics View框架(进阶篇)- 派生QGraphicsItem类创建自定义图元item

【QT学习】Graphics View框架(进阶篇)- 派生QGraphicsItem类创建自定义图元item

4.重写基类QGraphicsItem的两个纯虚函数

【QT学习】Graphics View框架(进阶篇)- 派生QGraphicsItem类创建自定义图元item

【QT学习】Graphics View框架(进阶篇)- 派生QGraphicsItem类创建自定义图元item

  • 纯虚函数QRectF boundingRect() const:自定义图元边界,计算图元轮廓的垂直边界最小矩形。
  • 纯虚函数void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = Q_NULLPTR):绘制需要显示的图像。在该实例中,我们需要对加载后的图片进行绘制。

5.在main函数中定义,并显示自定义图元

【QT学习】Graphics View框架(进阶篇)- 派生QGraphicsItem类创建自定义图元item

三、完整源码

1.main.cpp文件

#include "widget.h"
#include <QApplication>

#include <QGraphicsItem>	//图元
#include <QGraphicsScene>	//场景
#include <QGraphicsView>	//视图
#include <customItem.h>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    
    //创建视图
    QGraphicsView *view = new QGraphicsView();
    //创建场景
    QGraphicsScene *scene = new QGraphicsScene();
    //创建自定义图元项
    customItem *item = new customItem();
    //将场景添加到视图中
    view->setScene(scene);
    //将图元添加到场景中
    scene->addItem(item);
    //设置窗口大小
    view->resize(350,350);
    //窗口显示
    view->show();
    
    return a.exec();
}

2.customItem.h文件

#ifndef CUSTOMITEM_H
#define CUSTOMITEM_H

#include <QGraphicsItem>
#include <QPixmap>

class customItem : public QObject,public QGraphicsItem
{
    Q_OBJECT
public:
    customItem();
    QPixmap picture;
    QRectF boundingRect() const;
    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = Q_NULLPTR);
    virtual ~customItem(){}
};

#endif // CUSTOMITEM_H

3.customItem.cpp文件

#include <QPainter>
#include "customitem.h"

customItem::customItem()
{
    this->picture.load("./picture/search.png");
}

QRectF customItem::boundingRect() const
{
    return QRectF(0,0,this->picture.width(),this->picture.height());
}

void customItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    painter->drawPixmap(0,0,this->picture);
}

总结

   以上就是Graphics View框架(进阶篇)- 派生QGraphicsItem类创建自定义图元item的所有内容,后续还有Graphics View框架(高阶篇):使用Graphics View框架创建开机动画。
   原创不易,转载请标明出处,希望大家阅读后都能有所收获!若文章出现有误之处,欢迎读者留言指正批评!

【QT学习】Graphics View框架(进阶篇)- 派生QGraphicsItem类创建自定义图元item文章来源地址https://www.toymoban.com/news/detail-424890.html

到了这里,关于【QT学习】Graphics View框架(进阶篇)- 派生QGraphicsItem类创建自定义图元item的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 利用QT 的 Graphics View 系统实现一个 简易的 Graph Editor

    QT 中的 Graphics View 系统. 是一个相对成熟的渲染引擎的上层框架,通常也可以会叫做 Scene - View。 通常会有 QGraphicsView, QGraphicsScene, QGraphicsItem 这几个类构成。 view是视口(viewport);scene是一个场景,负责容纳各种item;而item就是可见的这些元件。 一般来说,绘图可以使用 QPainte

    2024年02月02日
    浏览(48)
  • 08-3_Qt 5.9 C++开发指南_Graphics View绘图架构

    采用QPainter 绘图时需要在绘图设备的 paintEvent()事件里编写绘图的程序,实现整个绘图过程。这种方法如同使用 Windows 的画图软件在绘图,绘制的图形是位图,这种方法适合于绘制复杂性不高的固定图形,不能实现图件的选择、编辑、拖放、修改等功能。 Qt 为绘制复杂的可交

    2024年02月13日
    浏览(42)
  • 【Qt图形视图框架】自定义QGraphicsItem和QGraphicsView,实现鼠标(移动、缩放)及键盘事件、右键事件

    说明 在使用Qt的图形视图框架实现功能时,一般会在其基础上进行自定义功能实现。 如:滚轮对场景的缩放,鼠标拖动场景中的项,以及可以在场景中进行右键操作等。 示例 myitem 为自定义QGraphicsItem,实现了边框、重绘事件、鼠标悬停、按键、右键菜单等功能。 myitem.h myi

    2024年02月04日
    浏览(49)
  • Qt QGraphicsItem获取鼠标位置对应图像坐标

    本次使用了QGraphicsView来加载图像,然后给其设置了一个QGraphicsScene场景,再给场景添加了一个自定义的QGraphicsItem,在其中重写了paint事件,用来重绘图像。 正常情况时,QGraphicsItem上图像的有效区域QRect大小和QGraphicsView一致,此时正好铺满,鼠标位置的坐标可以比较轻松的推

    2024年01月22日
    浏览(38)
  • 一文带你了解QT Model/View框架的设计思想和实现机制

    目录 1、QT Model/View框架简介 1.1、QT Model/View是什么? 1.2、QT Model/View框架核心思想 1.3、Model/View框架工作机制 1.4、Model/View框架的类 2、Model 2.1模型简介 2.2、模型索引 2.3、数据角色 2.4、QStringListModel 2.5、QFileSystemModel 2.6、QSortFilterProxyModel 3、View 4、Delegate 5、项选择模型 5.1、QIt

    2024年02月05日
    浏览(93)
  • Qt 使用QLabel的派生类实现QLabel的双击响应

            在QLabel中没有双击等事件响应,需要 构建其 派生类 ,自定义 信号(signals) 、重载 事件函数(event) ,最后在Qwidget中 使用connect链接即可 ,进而实现响应功能。         对于其余没有需求事件响应的QObject同样适用。         此外,该功能同样可以 使用 事件过滤器 ,

    2024年02月13日
    浏览(47)
  • unity进阶学习笔记:消息框架

    1 使用消息框架的目的 对于小型游戏,可能不需要任何框架,而是让各个游戏脚本直接相互通信。如要实现玩家受到攻击血量减少,通过玩家控制类向血条脚本发送消息减少血量。但是这样直接通信会导致各脚本通信关系记为复杂,并且每一个脚本都和多个脚本有联系,导致

    2024年02月06日
    浏览(39)
  • Unity进阶-ui框架学习笔记

    笔记来源课程:https://study.163.com/course/courseMain.htm?courseId=1212756805_trace_c_p_k2_=8c8d7393c43b400d89ae94ab037586fc 最上面的管理层(canvas) 调整下运行顺序,让他快于controller panel的控制层 panel下面的组件层 使用

    2024年02月16日
    浏览(49)
  • Python学习之路-爬虫进阶:爬虫框架运行

    安装框架的目的 利用setup.py将框架安装到python环境中,在编写爬虫时候,作为第三方模块来调用 框架安装第一步:完成 setup.py 的编写 以下代码相当于一个模板,只用更改name字段出,改为对应的需要安装的模块名称就可以,比如这里是:scrapy_plus 将setup.py文件放到scrapy_plus的

    2024年02月19日
    浏览(41)
  • Qt框架学习 --- CTK

    随着开发的深入,CTK框架还是要关注一下。了解CTK还是有必要的。本篇文章主要描述CTK框架加载带界面的插件,集成到主界面的操作。 什么是CTK? CTK怎么编译?这些就不赘述了,提供几个参考博客即可。 环境:Qt5.15.2 + vs2019(Qt6放弃吧,目前为止编不了;mingw也放弃吧,目前

    2024年02月02日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包