文章目录

  • 一、基类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

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


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

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

四、自定义图元

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

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

1、标识图元
每个图元都有一个枚举标识,例如路径图元的标识为:2
在场景操作中当检测Type值为2时,就可以确定这个图元是一个路径图元;

查看QGraphicsItem接口,可以发现Qt给开发者预留了标识:

开发者使用标识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图形视图框架--图元总结相关推荐

  1. Qt图形视图框架详解-安晓辉-专题视频课程

    Qt图形视图框架详解-12227人已学习 课程介绍         介绍Qt中的Graphics View Framework,涉及View.Scene.Item的关系,如何自定义QGraphicsI ...

  2. Qt 图形视图框架(Qt MVC)

    什么是MVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离 ...

  3. Qt 图形视图框架中的事件处理和传播

    目录名字 Qt 图形视图框架中的事件处理和传播 要点: Qt 图形视图框架中的事件处理和传播 图形视图框架在一些动画类的应用程序上经常会用到.该框架中的事件处理与传播机制也是经常会涉及. 程序设计核心 ...

  4. Qt图形视图框架图片图元QGraphicsPixmapItem

    文章可能被更新,最新地址:http://www.fearlazy.com/index.php/post/107.html 看这个标题还真有点拗口,一句话里出现了四个图字.这句话的关键词是图片,前面讲了 ...

  5. 201112阶段二qt图形视图框架

    目录 一.学习的知识点 一)事件 二)图形视图框架 二.上课没有听懂或者没有理解的地方 三.当天学习的收获 一.学习的知识点 一)事件 鼠标事件的创建 组合键 二)图形视图框架 场景类:坐标系以中心为 ...

  6. Qt图形视图框架:QGraphicsScene详解

    一.描述 1.场景提供了一个用于管理大量2D图形项的平面.该类充当图形项的容器. 它与视图一起用于可视化2D曲面上的图形图形项. 2.场景没有自己的视觉外观,只负责管理图形项. 3.场景的最大优势之一 ...

  7. Qt图形视图框架:视图增加标尺

    效果: 把视图.水平标尺.垂直标尺用网格布局放置. 每当拖动视图的滚动条时,更新标尺的偏移量: connect(deviceGraphicsView->horizontalScrollBar() ...

  8. Qt图形视图框架:将自定义图形项放入布局

    只有继承布局项QGraphicsLayoutItem的对象才能放入布局.继承QGraphicsLayoutItem后需要重写setGeometry().sizeHint()这两个函数. 以自定义滑动条 ...

  9. QT图形视图框架---场景 advance()函数

    调用场景的advance()函数就会自动调用场景中所有图形项的advance()函数,

最新文章

  1. Android系统源码导入Android studio
  2. NOKIA Update for Windows Phone
  3. input python 验证int_全国计算机二级Python真题解析-1
  4. java中的Sort函数,你值得看
  5. ansible 配置文件
  6. 小汤学编程之JAVA基础day04——流程结构
  7. 报错,Error starting ApplicationContext. To display the conditions report re-run your application with
  8. html悬停显示图片,JS实现悬停单元格显示图片
  9. 微信开发经常会用到的一些方法
  10. 编程之美1.7 光影切割问题
  11. 预测模型(数学建模)
  12. python中的猴子补丁Monkey Patch
  13. taptap服务器要维护多久,TapTap发布游戏事故保护功能 解决游戏炸服问题
  14. OPTEE:CA-TA会话的创建(二)
  15. 【iOS安全】iOS应用安全开发总结
  16. 做网站如何选阿里云服务器呢?
  17. import错误:undefined symbol: _ZN6caffe26detail37_typeMetaDataInstance_preallocated_32E
  18. 机组组合问题常用术语
  19. 80/20时间管理法则全面解析
  20. 矿大计算机 学硕专硕,【20考研】超详细对比,学硕专硕如何选,不懂的学弟学妹快进来看...

热门文章

  1. 音频传输之Jitter Buffer设计与实现
  2. 在线文库系统 文档在线预览 文库分享网站
  3. java习题8,java试题练习题(第8套
  4. 68个经典励志小故事,让你终身受益[转]
  5. 二级菜单选中,一级菜单背景变换
  6. 阿里云FinalShell连接
  7. Shell- 获取ESXI主机虚拟交换机中MAC表
  8. 6.7.1 机器人系统仿真/URDF、Gazebo与Rviz综合运用/机器人运动控制以及里程计信息显示
  9. 举个栗子!Tableau 技巧(175):通过 URL 传参实现不同工作簿的跳转
  10. 谷歌游览器打开pdf总是提示要另存为