首页 > 其他分享 >Qt图形视图框架--图元总结

Qt图形视图框架--图元总结

时间:2022-10-29 16:03:46浏览次数:54  
标签:Qt -- LineElementItem 视图 QGraphicsItem 图元 public penwidth


文章目录

  • ​​一、基类QGraphicsItem​​
  • ​​二、内部图元​​
  • ​​2.1、椭圆图元--QGraphicsEllipseItem​​
  • ​​2.2、线段图元--QGraphicsLineItem​​
  • ​​2.3、路径图元--QGraphicsPathItem​​
  • ​​2.4、图片图元--QGraphicsPixmapItem​​
  • ​​2.5、多边形图元--QGraphicsPolygonItem​​
  • ​​2.6、矩形图元--QGraphicsRectItem​​
  • ​​2.7、简单文本路径图元--QGraphicsSimpleTextItem​​
  • ​​2.8、文本图元--QGraphicsTextItem​​
  • ​​三、附加图元​​
  • ​​3.1、SVG图元--QGraphicsSvgItem​​
  • ​​四、自定义图元​​

一、基类QGraphicsItem

Qt图形框架中,QGraphicsItem是图元基类;


二、内部图元

2.1、椭圆图元–QGraphicsEllipseItem

Qt图形视图框架--图元总结_自定义

2.2、线段图元–QGraphicsLineItem

Qt图形视图框架--图元总结_qt_02

2.3、路径图元–QGraphicsPathItem

Qt图形视图框架--图元总结_自定义_03

2.4、图片图元–QGraphicsPixmapItem

Qt图形视图框架--图元总结_自定义_04

2.5、多边形图元–QGraphicsPolygonItem

Qt图形视图框架--图元总结_自定义_05

2.6、矩形图元–QGraphicsRectItem

Qt图形视图框架--图元总结_c++_06

2.7、简单文本路径图元–QGraphicsSimpleTextItem

Qt图形视图框架--图元总结_开发语言_07

2.8、文本图元–QGraphicsTextItem

Qt图形视图框架--图元总结_开发语言_08


三、附加图元

3.1、SVG图元–QGraphicsSvgItem

Qt图形视图框架--图元总结_自定义_09


QGraphicsSvgItem是用来显示SVG的图元,只需要调用:

QSvgRenderer* render = new QSvgRenderer(SVG_filePath);
svgItem->setSharedRenderer(render);

四、自定义图元

所有自定义图元都必须继承图元基类QGraphicsItem或其子类;

自定义图元:添加枚举标识、重新三个虚函数

1、标识图元

每个图元都有一个枚举标识,例如路径图元的标识为:2

Qt图形视图框架--图元总结_c++_10


在场景操作中当检测Type值为2时,就可以确定这个图元是一个路径图元;查看QGraphicsItem接口,可以发现Qt给开发者预留了标识:

Qt图形视图框架--图元总结_自定义_11


开发者使用标识​​UserType​​即可,当有多个自定义图元时,可以在其上累加,例如:

class LineElementItem : public QGraphicsItem
{
public:
enum { Type = UserType + 1};

LineElementItem()
~LineElementItem();
}

class LogicElementItem : public QGraphicsItem
{
public:
enum { Type = UserType + 2};

LogicElementItem ()
~LogicElementItem ();
}

2、重写虚函数int type() const​【返回图元类型】

class LineElementItem : public QGraphicsItem
{
public:
enum { Type = UserType + 1};

LineElementItem()
~LineElementItem();

int type() const
{
return Type;
}
}

3、重写虚函数QRectF boundingRect() const​【设置图元边界】

函数boundingRect()返回一个矩形,这个矩形就是自定义图元的区域(可视区域);

class LineElementItem : public QGraphicsItem
{
public:
enum { Type = UserType + 1};

LineElementItem()
~LineElementItem();

int type() const
{
return Type;
}

QRectF boundingRect() const //定义图元为一个128*128的矩形
{
qreal penwidth=1;
return QRectF(0-penwidth/2,0-penwidth/2,128+penwidth,128+penwidth);
}
}

4、重写void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr)

class LineElementItem : public QGraphicsItem
{
public:
enum { Type = UserType + 1};

LineElementItem()
~LineElementItem();

int type() const
{
return Type;
}

QRectF boundingRect() const //定义图元为一个128*128的矩形
{
qreal penwidth=1;
return QRectF(0-penwidth/2,0-penwidth/2,128+penwidth,128+penwidth);
}

void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
// 选中时绘制
if (option->state & QStyle::State_Selected) {
painter->setPen(QPen(Qt::red, 2, Qt::DashLine));
painter->setBrush(Qt::NoBrush);
painter->drawRect(boundingRect().adjusted(2,2,-2,-2));
}

QGraphicsItem::paint(painter,option,widget);
}
}


标签:Qt,--,LineElementItem,视图,QGraphicsItem,图元,public,penwidth
From: https://blog.51cto.com/wangjichuan/5806215

相关文章

  • Qt之悬浮球菜单
    目录一、概述二、效果展示三、实现代码1、菜单项2、悬浮球3、关键点四、相关文章原文链接:Qt之悬浮球菜单一、概述最近想做一个炫酷的悬浮式菜单,考虑到菜单展开和美观,所......
  • springboot像springnvc那样访问视图
    1.SpringBoot访问静态资源的位置(优先级按以下顺序)classpath默认就是resources,所以classpath:/static/就是resources/static/classpath:/META‐INF/resources/cl......
  • 工业网关BL110实现西门子S7-400 PLC 接入金鸽MQTT云平台
    LAN接口的配置COM口采集西门子S7-400PLC的配置工业智能网关BL110一共有一个LAN接口,一个WAN接口,可以通过LAN接口采集数据,通过WAN接口接入局域网,设置过程不一样,WAN接口可......
  • 工业网关BL110实现西门子S7-1200 PLC接入MQTT Client One云平台
    LAN接口的配置COM口采集西门子S7-1200PLC的配置工业智能网关BL110一共有一个LAN接口,一个WAN接口,可以通过LAN接口采集数据,通过WAN接口接入局域网,设置过程不一样,WAN接口......
  • QT设置窗口图标
    点击项目,添加新文件选择Qt,选择qtresourcefile点击choose,填写Filename文件名点击下一步,添加到项目,添加到版本控制系统Git,点击完成添加前缀AddPrefix点击添加AddFiles,图......
  • 第一次数据库实验代码整理-表与视图的基础操作
    一、 实验环境1. Windows2000或以上版本;2. SQLServer2005或以上版本。二、 实验目的1. 掌握数据库表与视图的基础知识;2. 掌握创建、修改、使用、删除表与视图的不......
  • QTableWidget设置列宽行高大小的几种方式
    列宽、行高自动分配//列宽自动分配tableWidget.horizontalHeader().sectionResizeMode(QHeaderView::Stretch)//行高自动分配tableWidget.verticalHeader().Section......
  • day21 单列索引与组合索引 & 索引的优点和使用原则 & 视图与函数
    索引1.索引有几种四种,单列索引,组合索引,全文索引,空间索引2.索引的优点所有的MySQL数据库列类型都可以被索引,也就是可以给任意字段加索引提高数据查询速度索引的缺点1......
  • Qt中全局变量的定义和使用
    全局变量的定义 现在需要将自定义的STRParameter变量定义为全局变量,就需要新建两个文件,分别命名为"global.h"和"global.cpp" 在global.h文件中对全局变量进......
  • Model/View框架简介-Qt
    一.Model/View框架简介1.Model/View框架核心思想    Model/View框架的核心思想是模型(数据)与视图(显示)相分离,模型对外提供标准接口存取数据,不关心数据如何显示,视图自定......