简述

QGraphicsItem 类是 QGraphicsScene 中所有 item 的基类。

它提供了一个轻量级的基础,用于编写自定义 item。其中包括:定义 item 的几何形状、碰撞检测、绘制实现、以及通过其事件处理程序进行 item 的交互,QGraphicsItem 是 Qt之图形视图框架 的一部分。

常见的 QGraphicsItem

为方便起见,Qt 为最常见的形状提供了一组典型的标准 item。它们是:

QGraphicsSimpleTextItem:提供了一个简单的文本标签项
QGraphicsTextItem:提供了一个格式化的文本项
QGraphicsLineItem:提供了一个直线项
QGraphicsPixmapItem:提供了一个图像项
QGraphicsRectItem:提供了一个矩形项
QGraphicsEllipseItem:提供了一个椭圆项
QGraphicsPathItem:提供了一个路径项
QGraphicsPolygonItem:提供了一个多边形项

QGraphicsSimpleTextItem

详细描述

QGraphicsSimpleTextItem 提供了一个简单的文本标签项,可以添加到 QGraphicsScene 中。

要设置 item 的文本,可以传递 QString 到 QGraphicsSimpleTextItem 的构造函数,或在之后调用 setText() 来更改文本。要设置文本填充色,调用 setBrush()。

QGraphicsSimpleTextItem 可以具有填充和轮廓,setBrush() 用于设置文本填充(即文本色),setPen() 用于设置绘制文本轮廓的画笔(后者可能很慢,特别是对于复杂的画笔,以及具有长文本内容的 item)。

如果只想绘制一行简单的文本,只需要调用 setBrush(),不需要设置画笔。QGraphicsSimpleTextItem 的画笔默认是 Qt::NoPen。

QGraphicsSimpleTextItem 使用文本的格式化大小和相关联的字体,为 boundingRect()、shape() 和 contains() 提供了一个合理的实现。可以通过调用 setFont() 设置字体。

QGraphicsSimpleText 不显示富文本,相反,可以使用 QGraphicsTextItem,它提供全文控制功能。

示例

代码

void TOPIScanningGUI::My()
{
QGraphicsSimpleTextItem *pItem = new QGraphicsSimpleTextItem();
pItem->setText("这是一个QGraphicsSimpleTextItem");
QFont font = pItem->font();
font.setPixelSize(); // 像素大小
font.setItalic(true); // 斜体
font.setUnderline(true); // 下划线
pItem->setFont(font);
pItem->setBrush(QBrush(QColor(, , )));
scene1->addItem(pItem);
}

QGraphicsTextItem

详细描述

QGraphicsTextItem 类提供了一个格式化的文本项,可以添加到 QGraphicsScene 中。

要设置 item 的文本,可以传递 QString 到 QGraphicsTextItem 的构造函数,或调用 setHtml()/setPlainText()。

QGraphicsTextItem 使用文本的格式化大小和相关联的字体,为 boundingRect()、shape() 和 contains() 提供了一个合理的实现。可以通过调用 setFont() 设置字体。

可以通过使用 setTextInteractionFlags() 设置 Qt::TextEditorInteraction 标志来使 item 可编辑。

item 的首选文本宽度可以使用 setTextWidth() 设置,并使用 textWidth() 获取。

注意:为了在中心对齐 HTML 文本,必须设置 item 的文本宽度。否则,可以在设置 item 的文本后调用 adjustSize()。

注意: QGraphicsTextItem 默认接受 hover 事件,可以使用 setAcceptHoverEvents() 更改此值。

纯文本

代码

void TOPIScanningGUI::My()
{
QGraphicsTextItem *pItem = new QGraphicsTextItem();
pItem->setPlainText("这是一个QGraphicsTextItem"); // 纯文本
pItem->setDefaultTextColor(QColor(, , )); // 文本色
QFont font = pItem->font();
font.setPixelSize(); // 像素大小
font.setItalic(true); // 斜体
font.setUnderline(true); // 下划线
pItem->setFont(font);
scene1->addItem(pItem);
}

QGraphicsLineItem

详细描述

QGraphicsLineItem 类提供了一个直线项,可以添加到 QGraphicsScene 中。

要设置 item 的直线,可以传递 QLineF 到 QGraphicsLineItem 的构造函数,或调用 setLine() 函数。line() 返回当前直线。默认情况下,该直线为黑色,宽度为 0,可以通过调用 setPen() 进行更改。

QGraphicsLineItem 使用直线和画笔的宽度,为 boundingRect()、shape() 和 contains() 提供了一个合理的实现。paint() 函数使用 item 关联的画笔绘制直线。

QGraphicsPixmapItem

详细描述

QGraphicsPixmapItem 类提供了一个图像项,可以添加到 QGraphicsScene 中。

要设置 item 的图像,可以传递 QPixmap 到 QGraphicsPixmapItem 的构造函数,或调用 setPixmap() 函数,pixmap() 返回当前的图像。

QGraphicsPixmapItem 使用 pixmap 的可选 alpha 掩码,为 boundingRect()、shape() 和 contains() 提供了一个合理的实现。

图像在 item 的 (0, 0) 坐标处绘制,由 offset() 返回。可以通过调用 setOffset() 更改绘图偏移量。

可以通过调用 setTransformationMode() 设置图像的变换模式,默认情况下,使用 Qt::FastTransformation,它提供了快速、不平滑的缩放。Qt::SmoothTransformation 在 painter 上启用 QPainter::SmoothPixmapTransform,质量取决于平台和视口。结果通常不如调用 QPixmap::scale() 直接,调用 transformMode() 获取项目的当前转换模式。

示例

代码

void TOPIScanningGUI::My()
{
// 定义一个 item
QGraphicsPixmapItem *pItem = new QGraphicsPixmapItem(); QPixmap image("D://logo.png");
pItem->setPixmap(image.scaled(, )); scene1->addItem(pItem);
}

QGraphicsRectItem

详细说明

QGraphicsRectItem 类提供了一个矩形项,可以添加到 QGraphicsScene 中。

要设置 item 的矩形,可以传递一个 QRectF 到 QGraphicsRectItem 的构造函数,或调用 setRect() 函数。rect() 返回当前矩形。

QGraphicsRectItem 使用矩形和画笔宽度,为 boundingRect()、shape() 和 contains() 提供了一个合理的实现。paint() 函数使用 item 关联的画笔和画刷绘制矩形,可以通过调用 setPen() 和 setBrush() 函数来设置。

注意:无效矩形(例如,宽度或高度为负)的呈现是未定义的。如果不能确定使用的是有效的矩形(例如,如果使用来自不可靠源的数据创建的矩形),那么应该使用 QRectF::normalized() 创建标准化的矩形,然后使用它们。

示例

代码

void TOPIScanningGUI::My()
{
// 定义一个 item
QGraphicsRectItem *pItem = new QGraphicsRectItem(); // 设置画笔、画刷
QPen pen = pItem->pen();
pen.setWidth();
pen.setColor(Qt::white);
pItem->setPen(pen);
pItem->setBrush(QBrush(QColor(, , ))); // 矩形区域 起点:(50, 50) 宽:100 高:100
pItem->setRect(QRectF(, , , )); scene1->addItem(pItem);
}

QGraphicsEllipseItem

详细说明

QGraphicsEllipseItem 类提供了一个椭圆项,可以添加到 QGraphicsScene 中。

QGraphicsEllipseItem 表示一个带有填充和轮廓的椭圆,也可以使用它的椭圆段(见 startAngle()、spanAngle())。

要设置 item 的椭圆,可以传递一个 QRectF 到 QGraphicsEllipseItem 的构造函数,或调用 setRect()。rect() 返回当前椭圆的几何形状。

QGraphicsEllipseItem 使用 rect 和画笔宽度,为 boundingRect()、shape() 和 contains() 提供了一个合理的实现。paint() 函数使用 item 关联的画笔和画刷来绘制椭圆,可以通过调用 setPen() 和 setBrush() 来设置。

示例

代码

void TOPIScanningGUI::My()
{
// 定义一个 item
QGraphicsEllipseItem *pItem = new QGraphicsEllipseItem(); // 设置画笔、画刷
QPen pen = pItem->pen();
pen.setWidth();
pen.setColor(Qt::white);
pItem->setPen(pen);
pItem->setBrush(QBrush(QColor(, , ))); // 矩形区域 起点:(50, 50) 宽:200 高:100
pItem->setRect(QRectF(, , , ));
pItem->setStartAngle( * ); // 起始角度
pItem->setSpanAngle( * ); // 跨角 scene1->addItem(pItem);
}

QGraphicsPathItem

详细描述

QGraphicsPathItem 类提供了一个路径项,可以添加到 QGraphicsScene 中。

要设置 item 的路径,可以传递 QPainterPath 到 QGraphicsPathItem 的构造函数,或调用 setPath() 函数,path() 返回当前路径。

QGraphicsPathItem 使用路径,为 boundingRect()、shape() 和 contains() 提供了一个合理的实现。paint() 函数使用 item 关联的画笔和画刷来绘制路径,可以通过调用 setPen() 和 setBrush() 函数来设置。

示例

代码

void TOPIScanningGUI::My()
{
const float Pi = 3.14159f; // 定义一个 item
QGraphicsPathItem *pItem = new QGraphicsPathItem(); // 绘制星星
QPainterPath starPath;
starPath.moveTo(, );
for (int i = ; i < ; ++i) {
starPath.lineTo( + * std::cos(0.8 * i * Pi), + * std::sin(0.8 * i * Pi));
}
starPath.closeSubpath();
pItem->setPath(starPath); // 设置画笔、画刷
QPen pen = pItem->pen();
pen.setWidth();
pen.setColor(Qt::white);
pItem->setPen(pen);
pItem->setBrush(QBrush(QColor(, , ))); scene1->addItem(pItem);
}

QGraphicsPolygonItem

详细描述

QGraphicsPolygonItem 类提供了一个多边形项,可以添加到 QGraphicsScene 中。

要设置 item 的多边形,传递 QPolygonF 到 QGraphicsPolygonItem 的构造函数,或调用 setPolygon() 函数。polygon() 返回当前的多边形。

QGraphicsPolygonItem 使用多边形和画笔宽度,为 boundingRect()、shape() 和 contains() 提供了一个合理的实现。paint() 函数使用 item 关联的画笔和画刷绘制多边形,可以通过调用 setPen() 和 setBrush() 函数进行设置。

示例

代码:

void TOPIScanningGUI::My()
{
// 定义一个 item
QGraphicsPolygonItem *pItem = new QGraphicsPolygonItem(); // 绘制多边形
QPolygonF polygon;
polygon << QPointF(200.0, 120.0) << QPointF(230.0, 130.0)
<< QPointF(260.0, 180.0) << QPointF(200.0, 200.0);
pItem->setPolygon(polygon); // 设置画笔、画刷
QPen pen = pItem->pen();
pen.setWidth();
pen.setColor(Qt::black);
pItem->setPen(pen);
pItem->setBrush(QBrush(QColor(, , ))); scene1->addItem(pItem);
}

QT学习笔记6:常见的 QGraphicsItem的更多相关文章

  1. qt学习笔记(五) QGraphicsPixmapItem与QGraphicsScene的编程实例 图标拖动渐变效果

    应大家的要求,还是把完整的project文件贴出来,大家省点事:http://www.kuaipan.cn/file/id_48923272389086450.htm 先看看执行效果,我用的群创7寸屏 ...

  2. Qt学习笔记-Widget布局管理

    Qt学习笔记4-Widget布局管理       以<C++ GUI Programming with Qt 4, Second Edition>为参考 实例:查找对话框 包含三个文件,f ...

  3. QT学习笔记(一)——Helloworld

    QT学习笔记(一)--Helloworld 一.调试的基本方法: Log调试法 --在代码中加入一定的打印语句 --打印程序状态和关键变量的值 断点调试法: --在开发环境中的对应代码行加上断点 -- ...

  4. qt学习笔记(七)之数据库简介(所有支持数据库类型的列表)

    笔者最近用Qt写公司的考勤机.本来要求是要基于frameBuffer下用自己开发的easyGUI来进行上层应用开发,但是考虑到easyGUI提供的接口不是很多,就考虑用Qt来开发,顺带练练手. 废话不 ...

  5. Qt学习笔记(2)-利用StackWidget实现选项卡式页面

    学习笔记第二篇,利用Qt实现选项卡式的页面,效果如图1.1-图1.3所示.程序实现的功能是通过点击状态栏实现不同页面的切换,实际上Qt中自带有Tab选项卡式的控件,本文利用StackWidge实现类似 ...

  6. cips2016+学习笔记︱简述常见的语言表示模型(词嵌入、句表示、篇章表示)

    在cips2016出来之前,笔者也总结过种类繁多,类似词向量的内容,自然语言处理︱简述四大类文本分析中的"词向量"(文本词特征提取)事实证明,笔者当时所写的基本跟CIPS2016一 ...

  7. Qt学习笔记(1) hello world

    Qt的简介: Qt是一个跨平台的C++ GUI库实现,原本只是以为它只提供一些图形接口,看来我还是低估了它,采用文档Qt学习之路2开始学习,不知道这个文档是不是有点老了,管他呢,先了解下. 搭建环境: ...

  8. 【Qt学习笔记】Qt+VS2010的配置

    http://blog.csdn.net/jocyln9026/article/details/8575218 关于Qt Qt是1991年由Trolltech公司开发的一个跨平台的C++图形用户界面应 ...

  9. QT学习笔记1

    不准备用MFC了,想切换到QT.所以跟着网上的一个笔记学习. 1 开发环境是VS2008+QT4.7+VassistX 具体如何配置看这个帖子:http://qimo601.iteye.com/blo ...

随机推荐

  1. mysql zip 解压安装

    系统:win10 专业版 mysql 5.7.21 解压安装. 对于Windows,mysql官网推荐使用可执行文件进行安装,这里我还是暂时用noinstall 解压zip文件来安装 zip 文件解压 ...

  2. python概念-其实只要简单了解一下,但是却讲了将近两个小时的知识点:元类

    说实话,我真心不太想总结这个东西,算了,炒一下egon的吧 1 引子 1 class Foo: 2 pass 3 4 f1=Foo() #f1是通过Foo类实例化的对象 python中一切皆是对象,类 ...

  3. 解决阿里云无法正常使用samba的问题【转】

    转自:https://blog.csdn.net/u011949148/article/details/54311288 昨天在阿里云上申请了一个云服务器,系统用的是ubuntu14.04,由于是免费 ...

  4. Pytorch数据读取框架

    训练一个模型需要有一个数据库,一个网络,一个优化函数.数据读取是训练的第一步,以下是pytorch数据输入框架. 1)实例化一个数据库 假设我们已经定义了一个FaceLandmarksDataset数 ...

  5. shell服务管理->

    nginx.php等服务管理练习脚本 ->nginx的启动状态 root@jumpserver- day02]# cat nginx_web.sh #!/bin/bash source /etc ...

  6. RestTemplate中文乱码问题(spring-web3.0.7版本)

    从网上找的方法: 方法一: //resttemplate乱码问题 //3.1.X以上版本使用 // restTemplate.getMessageConverters().add(0, StringH ...

  7. 你的组织使用了 windows defender 应用程序控制来阻止此应用

    =============================================== 2018/2/8_第1次修改                       ccb_warlock === ...

  8. openlayers常用操作

    1.坐标转换 根据当前坐标系与目标坐标系进行转换ol.proj.transform(coordinate, source, destination);  //coordinate:数组:source: ...

  9. HMM算法

    HMM的应用 HMM是生成模型 词性标注:给定一个词的序列(也就是句子),找出最可能的词性序列(标签是词性).如ansj分词和ICTCLAS分词等. 分词:给定一个字的序列,找出最可能的标签序列(断句 ...

  10. MySQL学习笔记:floor、round —— 取整

    在MySQL中做数值处理,需要取整或者四舍五入. floor:函数只返回整数部分,小数部分舍弃: round:函数四舍五入: END 2018-05-29 11:31:22