程序运行截图如下:

原理:使用QPainter一个部分,一个部分的画

源码:

mygraphicsitem.h

#ifndef MYGRAPHICSITEM_H
#define MYGRAPHICSITEM_H#include <QGraphicsItem>class MyGraphicsItem:public QGraphicsItem
{
public:MyGraphicsItem(QGraphicsItem *parent=0);~MyGraphicsItem();protected:QRectF boundingRect()const;void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
};#endif // MYGRAPHICSITEM_H

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
class QGraphicsScene;namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();private:Ui::Widget *ui;QGraphicsScene *m_scene;
};#endif // WIDGET_H

main.cpp

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

mygraphicsitem.cpp

#include "mygraphicsitem.h"
#include <QPainter>
#include <QPen>
#include <QRectF>MyGraphicsItem::MyGraphicsItem(QGraphicsItem *parent):QGraphicsItem(parent)
{setFlags(QGraphicsItem::ItemIsSelectable|QGraphicsItem::ItemIsMovable);
}MyGraphicsItem::~MyGraphicsItem()
{}QRectF MyGraphicsItem::boundingRect() const
{return QRectF(-14,-50,55,70);
}void MyGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{Q_UNUSED(option)Q_UNUSED(widget)painter->setPen(QPen(Qt::white,1));painter->drawRect(-14,-50,55,70);painter->setPen(QPen(Qt::red,2));painter->drawLine(0,0,0,10);painter->drawLine(0,10,30,10);painter->drawLine(30,10,30,0);painter->drawLine(15,10,15,-20);painter->drawLine(15,-20,0,-20);QRectF rectangle(0,-33,30,30);int startAngle=-180*16;int spanAngle=270*16;painter->drawArc(rectangle, startAngle, spanAngle);painter->drawLine(15,-35,15,-40);
}

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include "mygraphicsitem.h"
#include <QGraphicsScene>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);m_scene=new QGraphicsScene;ui->graphicsView->setScene(m_scene);ui->graphicsView->setRenderHint(QPainter::Antialiasing);m_scene->setBackgroundBrush(QBrush(Qt::black));MyGraphicsItem *item=new MyGraphicsItem;item->setPos(0,0);m_scene->addItem(item);
}Widget::~Widget()
{delete ui;
}

Qt工作笔记-使用QGraphicsItem绘制复杂的图形相关推荐

  1. Qt工作笔记-使用QGraphicsItem加载图片并实现碰撞

    因为要做一个游戏,在线只是一个知识点例子,作下笔记而已.只给出伪代码,游戏作玩,开源发布!!! 这里有2个知识点 一个是QGraphicsItem的绘图. 一个是QGraphicsItem的碰撞. 实 ...

  2. Qt工作笔记-发送端发送Json格式的数据包,接收端解析数据包

    原理以及运行 原理是因为QJsonDocument提供了一个函数toJson 可以直接把Json数据转成QByteArray,这样就可以直接发送数据包,然后再按照常规方法解析即可,本源码中含解析内容, ...

  3. 【Qt】2D绘图之绘制简单的图形

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 绘制图形 04. 画笔和画刷 05. 绘制弧线 06. 附录 01. 概述 Qt中提供了强大的2D绘图系统,可以使用同一A ...

  4. Qt工作笔记-ListWidget拖动(拖拽)到QGraphicsScene

    程序运行截图如下: 程序很简单,有个坑,如下: QGraphicsScene要经过 dragMoveEvent(QGraphicsSceneDragDropEvent *event) 才能触发这个 d ...

  5. Qt工作笔记-绘制静态折线图

    话不多说,程序运行截图如下: 程序结构图如下: 这里要注意一点: 要把QWidget提升为QChartView 并且在工程文件加上 Qt+=charts 代码如下: widget.h #ifndef ...

  6. C/C++|Qt工作笔记-4种方法判断当前对象(类)名或标识(继承发,typeid法,元对象className()法,Q_CLASSINFO法)

    回想起3个月前,刚刚参加工作也做过类似的笔记,但只有2种方法,估计刚毕业没有什么墨水,经过3个月时间又多了2种方法: 这些方法都可用于RTTI 第一个方法是继承发(C++中很推荐用这个,感觉用这个结构 ...

  7. Qt工作笔记-在Graphics上写文本(QGraphicsSimpleTextItem与QGraphicsTextItem的基本使用)

    查了下文档发现就这2个, 一个是QGraphicsTextItem,另外一个是QGraphicsSimpleTextItem 从官方对QGraphicsTextItem中的描述中可以看到: 这个QGr ...

  8. Qt工作笔记-3D效果唤出QWidgets界面(QGraphicsProxyWidget与QTimeLine)

    程序运行截图如下: 关键点一: ->:这个箭头表示左边的类是放到右边的类里面的 QWidget->QGraphicsProxyWidget QGraphicsProxyWidget-> ...

  9. Qt工作笔记-Qt元对象系统解析【2合1】

    博文转载地址: https://blog.csdn.net/spwper/article/details/51332187 说Qt信号与槽是一个很好机制,不如说Qt的元对象系统很强大.这也是大家讲Qt ...

最新文章

  1. Android studio自定义变量
  2. win10 本地升级和系统覆盖更新教程
  3. postman发送object_.NetCore HttpClient发送请求的时候为什么自动带上了一个RequestId头部...
  4. HTML设置允许冒泡,html css hover也会冒泡
  5. 如何让梯形变成平行四边形_开放的课堂 创新的天地——平行四边形的面积教学片段与反思...
  6. linux dev sda1 满了,/dev/sda1把磁盘几乎都满了,我该怎么办呢??
  7. win7登录密码破解工具
  8. go语言的安装、环境变量配置及简单使用
  9. 微信小程序等第三方应用接入易班的api
  10. 32强鹏城逐战!“共筑梦想、创赢未来” 2021年绿色产业创新创业大赛深圳赛区比赛精彩上演
  11. 北斗导航公共服务平台首次落户四川
  12. hotmail邮箱在Outlooknbsp;2010中…
  13. MemoryCache缓存
  14. 再探Struts框架
  15. cube station下载_cube station魔方软件下载
  16. 王者荣耀坦克位思路和上分必读知识
  17. 彩信下载不了怎么回事?
  18. MySQL建员工表案例
  19. 在一个国家仅有1分,2分,5分硬币,将n(n=5)分钱兑换成硬币有很多种兑法。请你编程序计算出10分钱共有多少种兑法,并列出每种兑换方式。
  20. 为什么跑完步了膝盖会疼痛?

热门文章

  1. 突发,Gitee 图床废了
  2. 乐乐茶签约帆软软件,打造新式茶饮数字化管理新标杆
  3. IT人员看待和预防癌症十大建议
  4. 但我发现了幸福的超级玛丽
  5. 刚到的新公司 前任经理匆匆见了一面 飞鸽传书下载
  6. 【狂转】某个N人的访谈记录(完)
  7. 经典面试题(31):以下代码将输出的结果是什么?
  8. c语言指针对齐,告诉C指针数据是16字节对齐
  9. c语言设计第4章答案,《C语言程序设计》第4章习题答案.doc
  10. RandomizedLogisticRegression ImportError解决思路参考