Qt — Graphics/View框架

这篇具有很好参考价值的文章主要介绍了Qt — Graphics/View框架。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

Qt的Graphics/View框架被用来存放、显示二维图形元素,处理那些对图形元素进行操作的交互命令。


一、Qt图形系统介绍

Qt 应用程序的图形界面包含各种控件,比如窗口、按钮、滚动条等。所有这些控件对象都具有一个共同的基类QWidget。一个QWidget对象是构成图形界面的基本单位。它能够在屏幕上绘制自己,能够处理鼠标、键盘事件。控件所占的屏幕区域总是矩形的。在屏幕上显示多个控件时会按照一定的顺序逐个显示。我们称先被显示的控件位于“底层”,后被显示的位于“顶层”。当多个控件所占区域重叠时,顶层控件会遮挡底层控件。

我们知道,控件之间可以形成父子关系,比如对于一个对话框,其中的按钮、滚动条等为子控件,对话框为父控件。子控件常常作为父控件的数据成员出现,所以我们也称一个父控件包含一个子控件,或者一个子控件被嵌入到一个父控件中。大部分控件都作为子控件出现,没有父控件的控件被称为窗口。通常,一个窗口的四周具有边框,其顶部具有一个标题。Qt的QMainWindow以及QDialog是常用的窗口控件。父控件的尺寸较大,子控件的尺寸较小。当子控件的部分或者全部落在父控件区域之外时,只有位于父控件区域之内的部分才会被绘制。一个图形界面由多个控件层叠而成,父控件位于底层,而子控件位于顶层。Qt总会先绘制底层的控件再绘制顶层的控件,以形成层叠效果。

绘制一个几何图形需要做两方面工作。

(1)计算该图形中每个像素的坐标位置。比如在绘制一个线段时,我们往往只是给定起点、终点的坐标,绘制时就需要计算线段上任意一点的坐标。虽然理论上一个线段有无穷多个点,但是由于计算机屏幕、打印机等图形输出设备的分辨率是有限的,我们只需要计算该线段上有限个点的坐标,类QPainter负责完成此项任务。

(2)将计算出来的轨迹输出到特定设备,比如屏幕或者打印机,类QPainterDevice表示这些设备。

程序员通常使用QPainter的构造函数QPainter ( QPaintDevice * device )构造一个对象,调用该对象的图形绘制函数,即可在参数device所指的设备上绘制图形。QPainter提供了丰富的图形绘制函数,经常使用的图形绘制函数如下。drawLine(),drawPolyline()和drawArc()分别绘制直线、折线、曲线,drawRect(),drawEllipse(),drawPolygon(),drawPie()分别绘制矩形、椭圆、多边形、馅饼形。绘制前,我们可以调用setPen()设定线宽、线的颜色等参数。如果被绘制的图形是封闭的,图形内部将被填充。函数setBrush()设置填充颜色、填充模式等。为了输出文字,可以调用drawText(),而setFont()可以设置字体、字号等。

二、Graphics/View框架

Qt的Graphics/View框架被用来存放、显示二维图形元素,处理那些对图形元素进行操作的交互命令。

该框架包含3个核心类:QgraphicsItemQgraphicsSceneQGraphicsViewQGraphicsItem表示被显示的图形元素。QGraphicsScene表示囊括了所有图形元素的场景。该类只表示一个场景由哪些图形元素组成,并不负责显示其中的元素。QGraphicsView负责显示一个场景中的部分或者全部图形元素。一个场景可以对应多个QGraphicsView对象,以显示一个场景的不同区域,或者以不同的方式来显示该场景。

Graphic/View框架还处理那些对图形元素进行操作的交互命令。例如,当用户单击左键、试图选择某个图形元素时,QGraphicsView将鼠标坐标换算为QGraphicsScene的坐标,遍历各个QGraphicsItem对象,判断哪个图形元素被单击。

QGraphicsScene维护一个列表,记录哪些图形元素被选中。另外,它还维护一个数据结构,记录哪个或者哪些图形元素获得聚焦。用户的键盘事件经由QGraphicsView传递给QGraphicsScene,后者将键盘事件传递给获得聚焦的图形元素。

Graphics View框架涉及如下图所示的3个坐标系。每个图形元素(QGraphicsItem对象)有其自身的坐标系,可以自由选择原点位置,坐标值具有浮点精度。所有图形元素组成的场景(QGraphicsScene对象)拥有自己的坐标系,可以自由选择原点位置,坐标值也具有浮点精度。以上两个坐标系和具体显示设备(比如屏幕)无关,所以它们的坐标值具有浮点精度。每个视图(QGraphicsView对象)也拥有自己的坐标系。由于这个坐标系和具体显示设备密切相关,而任何一个显示设备的分辨率都是有限的,因而这个坐标系中的坐标值只能是整数,不能是浮点数。该坐标系的坐标原点被固定为视图左上角。以上3个类的成员函数仅使用与该类对应的坐标系。

graphicsview控件,Qt,C++,qt,开发语言,ui

场景中的图形元素在二维空间上可能发生部分或者全部重叠,称为图形元素之间的碰撞。有些应用场合允许碰撞的发生,比如在类似于Visio这样的绘图程序中,用户可以将一个椭圆元素和一个文本元素重叠,得到一个内部有文字标注的椭圆图形。而其他一些应用场合则禁止碰撞的发生。比如在电路板布线程序中,表示电子元件的图形元素不能够碰撞。碰撞的检测是由QGraphicsScene和QGraphicsItem协作完成的。QGraphicsItem有一个虚函数shape(),负责返回其自身的轮廓。QGraphicsScene的成员函数collidingItems()负责查询场景中每个图形元素的轮廓,判断哪些元素和某个指定的元素相撞。文章来源地址https://www.toymoban.com/news/detail-770030.html

到了这里,关于Qt — Graphics/View框架的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 利用QT 的 Graphics View 系统实现一个 简易的 Graph Editor

    QT 中的 Graphics View 系统. 是一个相对成熟的渲染引擎的上层框架,通常也可以会叫做 Scene - View。 通常会有 QGraphicsView, QGraphicsScene, QGraphicsItem 这几个类构成。 view是视口(viewport);scene是一个场景,负责容纳各种item;而item就是可见的这些元件。 一般来说,绘图可以使用 QPainte

    2024年02月02日
    浏览(50)
  • [QT编程系列-3]:C++图形用户界面编程,QT框架快速入门培训 - 2- QT程序的运行框架:HelloWorld、常见控件、对象树原理

    目录 2. QT程序的运行框架 2.1 Hello World程序框架 2.2 QT Designer初识 2.3 用QT Designer设计用户登录界 上述示例代码中,首先根据应用程序的需求使用 QCoreApplication 或 QApplication 定义 app 对象。如果你的应用程序需要图形界面,则使用 QApplication,否则使用 QCoreApplication。然后,你可以

    2024年02月15日
    浏览(52)
  • 一文带你了解QT Model/View框架的设计思想和实现机制

    目录 1、QT Model/View框架简介 1.1、QT Model/View是什么? 1.2、QT Model/View框架核心思想 1.3、Model/View框架工作机制 1.4、Model/View框架的类 2、Model 2.1模型简介 2.2、模型索引 2.3、数据角色 2.4、QStringListModel 2.5、QFileSystemModel 2.6、QSortFilterProxyModel 3、View 4、Delegate 5、项选择模型 5.1、QIt

    2024年02月05日
    浏览(105)
  • Qt 之tableView控件C++语言

    table view是用的比较多的一个控件之一,我们在展示数据或者表格的时候经常用到。 1、添加表头 2、 添加行数据 3、 获取双击事件 4、获取选中行内容 5、删除行 以上就是QT中TABLE VIEW的使用,其实还有很多属性可以设置,比如是否隐藏表头呀,是否显示网格线呀,QSS样式设置

    2024年02月13日
    浏览(42)
  • 【QT开发笔记-基础篇】| 第二章 常用控件 | 2.12 表格控件 QTableWidget

    【QT开发笔记-基础篇】| 第二章 常用控件 | 2.12 表格控件 QTableWidget(1) QTableWidget 是 Qt 中的表格控件,可以行列的形式来展示数据 QTableWidget 有很多属性和方法,完整的可查看帮助文档。 在窗口上放置一个 QTableWidget 控件后,既可以在设计师 UI 界面来编辑属性和添加数据,也

    2024年02月12日
    浏览(50)
  • 基于Qt5的图像交互控件开发(C++实现)

    博主近期看到海康VM、halcon以及visionpro视觉软件都包含一个图像智能交互控件,然后近期根据其中的技术原理,也基于Qt5仿照开发了一个类似的功能,包含矩形、旋转矩形、任意多边形、圆、圆环、扇环,直线卡尺以及圆卡尺等常用控件,图像智能交互是在计算机视觉领域中

    2024年02月05日
    浏览(60)
  • C++ Qt框架开发 | 基于Qt框架开发实时成绩显示排序系统(3) 保存表格数据

    对上两篇篇的工作C++ Qt框架开发| 基于Qt框架开发实时成绩显示排序系统(1)-CSDN博客和C++ Qt框架开发 | 基于Qt框架开发实时成绩显示排序系统(2)折线图显示-CSDN博客继续优化,增加一个 保存按钮,用于保存成绩数据。 1)在ui界面添加一个按钮         将其命名为saveBtn。

    2024年02月19日
    浏览(44)
  • 05-1_Qt 5.9 C++开发指南_Model/View结构基础(基本原理;数据模型;试图组件;代理)

    Model/View(模型/视图) 结构是 Qt 中用界面组件显示与编辑数据的一种结构,视图 (View)是显示和编辑数据的界面组件,模型 (Model) 是视图与原始数据之间的接口。 Model/View 结构的典型应用是在数据库应用程序中,例如数据库中的一个数据表可以在一个 OTableView 组件中显示和编辑。

    2024年02月17日
    浏览(51)
  • 【[Qt]基于QChartView开发的图表显示控件,支持实时显示,动态更新,支持鼠标交互等操作】

    十字线和显示坐标实现 在.h文件中定义十字线lineitem变量和坐标textitem变量 在Cpp文件中初始化 然后定义鼠标事件,在鼠标进入时显示,移出时隐藏,移动时显示。 其他实现请参考具体代码 ChartDrawer.h文件 ChartDrawer.cpp 文件 具体使用代码如下 1、初始化类对象,并加入界面布局

    2023年04月23日
    浏览(44)
  • 在VS2022中开发Qt程序添加控件后源代码不识别不更新解决方法

    问题表现: 双击 *.ui 后,添加控件并保存,回到 VS2022 源代码编辑器,输入 ui.(点) 或者 ui- 时无反应,并且源代码中的类名有红色波浪线。试过编译 *.ui,然后 “重新扫描解决方案”,结果无效。 解决方法: 假设要进行控件编辑的 ui 文件名为 Test.ui 1、在 VS2022 中打开 Test

    2024年02月16日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包