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

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

前言 

本篇,我们将通过对QGraphicsItem类进行派生,创建自定义图元item并显示在窗口中。我们将以创建一张从文件读取的图片item为例进行分析。

一、实现效果

二、实现流程

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

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

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

(2)重写生成的customItem类

(3)重写后的customItem类

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

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

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

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

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

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

三、完整源码

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的所有内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/800418.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Nodejs + express连接数据库mongodb

文章目录 先创建一个js文档安装 MongoDB 驱动程序&#xff1a;引入 MongoDB 模块&#xff1a;设置数据库连接&#xff1a;新建一个表试试执行数据库操作&#xff1a;关闭数据库连接&#xff1a; 前面需要准备的内容可看前面的文章&#xff1a; Express框架搭建项目 node.js 简单…

轻松上手Jackjson(珍藏版)

写在前面 虽然现在市面上有很多优秀的json解析库&#xff0c;但 Spring默认采用Jackson解析Json。 本文将通过一系列通俗易懂的代码示例&#xff0c;带你逐步掌握 Jackson 的基础用法、进阶技巧以及在实际项目中的应用场景。 一、Jackjson简介 Jackson 是当前用的比较广泛的&a…

idea开发 java web 疫情信息查询系统bootstrap框架web结构java编程计算机网页接口查询

一、源码特点 java 疫情信息查询系统是一套完善的完整信息系统&#xff0c;结合java web开发和bootstrap UI框架完成本系统 &#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 前段主要技术 css j…

AcWing 2069. 网络分析 (并查集,树上差分)

小明正在做一个网络实验。 他设置了 n n n 台电脑&#xff0c;称为节点&#xff0c;用于收发和存储数据。 初始时&#xff0c;所有节点都是独立的&#xff0c;不存在任何连接。 小明可以通过网线将两个节点连接起来&#xff0c;连接后两个节点就可以互相通信了。 两个节点…

为雪域高原乡村振兴发挥保险作用——中国平安在西藏那曲比如县开展“牦牛险”的背后

牦牛对于西藏的农牧民来说&#xff0c;无疑是重要的生产资料和生活资料&#xff0c;然而&#xff0c;俗语有言&#xff0c;“家财万贯&#xff0c;带毛的不算”&#xff0c;一旦疫病或天灾来袭&#xff0c;农牧民几乎没有抵抗之力&#xff0c;受到的打击也堪称毁灭性。如何破解…

The Closest Pair Problem

Problem Let S be a set of n points ((xi,yi), 1≤i≤n) in the plane, finding a pair of points p and q in S whose mutual distance is minimum. Algorithm 1: Θ ( n 2 ) The brute-force algorithm simply examines all the possible n(n−1)/2 distances and returns t…

蓝桥杯竞赛经典题型模板

十进制转R进制 #include<iostream> #include<string> #include<algorithm> using namespace std;string tentoR(int x, int r) {if (x 0) return "0"; // 如果x为0&#xff0c;直接返回"0"string s;while (x) {int num x % r;if (num…

CentOS部署Apache Superset大数据可视化BI分析工具并实现无公网IP远程访问

文章目录 前言1. 使用Docker部署Apache Superset1.1 第一步安装docker 、docker compose1.2 克隆superset代码到本地并使用docker compose启动 2. 安装cpolar内网穿透&#xff0c;实现公网访问3. 设置固定连接公网地址 前言 Superset是一款由中国知名科技公司开源的“现代化的…

react native 相机拍照

安装插件 npm install react-native-image-picker // 引入import { launchCamera, launchImageLibrary} from react-native-image-picker; 代码如下 <Button title"点击启动相机" onPress{() > takePhoto()}></Button> <Button title"点击启…

模具行业项目管理系统哪家好?模具项目管理系统找企智汇!

模具行业是一个对项目管理要求非常高的领域&#xff0c;涉及到复杂的制造流程、精细的工艺要求以及紧密的供应链协作。因此&#xff0c;选择一款适合模具行业的项目管理系统至关重要。 企智汇作为一款专注于企业数字一体化项目管理的软件&#xff0c;为模具行业提供了全面的项…

解决Xshell连接不上虚拟机

相信有很多同学和我一样遇到这个问题&#xff0c;在网上看了很多教程基本上都先让在虚拟机输入ifconfig命令查看ip地址&#xff0c;弄来弄去最后还是解决不了&#x1f62d;&#x1f62d;&#xff0c;其实问题根本就不在命令上&#xff0c;很大概率是我们的虚拟机没有开启网卡&a…

CSS实现热门创作者排行榜(毛玻璃效果)

CSS实现热门创作者排行榜&#xff08;毛玻璃效果&#xff09; 效果展示 CSS 知识点 CSS 基础知识回顾filter 属性运用回顾 整体页面布局实现 <div class"container"><h3>Popular Creator Rank List</h3><!-- 用户列表容器 --><div cl…

【剪映专业版】02软件快捷键

视频课程&#xff1a;有知公开课【剪映电脑版教程】 快捷键 苹果电脑选择Final Cut Pro X Windows电脑选择Premiere Pro 常用快捷键 更改快捷键

刷题之动态规划-子序列

前言 大家好&#xff0c;我是jiantaoyab&#xff0c;开始刷动态规划的子序列类型相关的题目&#xff0c;子序列元素的相对位置和原序列的相对位置是一样的 动态规划5个步骤 状态表示 &#xff1a;dp数组中每一个下标对应值的含义是什么>dp[i]表示什么状态转移方程&#xf…

RuoYi-Cloud下载与运行

一、源码下载 若依官网:RuoYi 若依官方网站 鼠标放到"源码地址"上,点击"RuoYi-Cloud 微服务版"。 跳转至Gitee页面,点击"克隆/下载",复制HTTPS链接即可。 源码地址为:https://gitee.com/y_project/RuoYi-Cloud.git 点击复制 打开IDEA,选…

千万不要错过这6款能让你快速写作成长的宝藏软件…… #学习方法#AI写作

国外ChatGPT爆火&#xff0c;AI写作在国内也引起不小的瞩目&#xff0c;目前国内的AI写作工具少说也有几十上百个&#xff0c;要在这么多AI写作中找出适合自己的工具&#xff0c;一个一个尝试是不太现实的&#xff0c;所以今天就给大家推荐一些款AI写作工具。帮助你少走弯路&am…

开源AI程序员SWE-Agent的实现方法

1 引子 前几天&#xff0c;AI 编程机器人 Devin 引起了热议。传言称&#xff1a;程序员的饭碗就要丢了。这两天&#xff0c;一个类似功能的产品 SWE-Agent 开源&#xff0c;在 SWE-Bench 上实现了与 Devin 类似的效果。下面让我们来看看 AI 程序员的具体实现方法。 2 信息 地…

unicloud中文字段排序bug

db.collection(ledy-db).field( "序号,客户名称,期初余款,折扣,收款日期,收款金额,赠送金额,备注1,订单日期,订单金额,备注2,备注3,余款,老师).orderBy(客户名称).get()中文字段排序查不出数据 然后只能用使用原生云函数的sort方法来排序 云数据库聚合操作aggregate | u…

抖音电商罗盘品牌人群运营策略指南

【干货资料持续更新&#xff0c;以防走丢】 抖音电商罗盘品牌人群运营策略指南 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 抖音运营资料合集&#xff08;完整资料包含以下内容&#xff09; 目录 品牌人群运营策略&#xff0c;旨在帮助品牌通过精细化运营提…

深入理解MySQL中的utf8、utf8mb4和排序规则

在MySQL中,字符集和排序规则是两个非常重要的概念,它们决定了数据库如何存储和比较字符串数据。今天我们来探讨一下MySQL中几种常用的字符集和排序规则之间的区别和适用场景。 utf8和utf8mb4 utf8和utf8mb4都是MySQL中用于存储Unicode字符的字符集编码。但是它们有一个重要区…