`
izuoyan
  • 浏览: 9223604 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Qt学习之路(30): Graphics View Framework

阅读更多
版权声明: 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://devbean.blog.51cto.com/448512/241186
现在基本上也已经到了2D绘图部分的尾声,所谓重头戏都是在最后压轴的,现在我们就要来看看在绘图部分功能最强大的Graphics View。我们经常说KDE桌面,新版本的KDE桌面就是建立在Graphics View的基础之上,可见其强大之处。
Qt的白皮书里面这样写道:“Qt Graphics View 提供了用于管理和交互大量定制的 2D 图形对象的平面以及可视化显示对象的视图 widget,并支持缩放和旋转功能。Graphics View 使用 BSP(二进制空间划分)树形可非常快速地找到对象,因此即使是包含百万个对象的大型场景,也能实时图形化显示。”
Graphics View是一个基于item的M-V架构的框架。
基于item意思是,它的每一个组件都是一个item。这是与QPainter的状态机不同。回忆一下,使用QPainter绘图多是采用一种 面向过程的描述方式,首先使用drawLine()画一条直线,然后使用drawPolygon()画一个多边形;而对于Graphics View来说,相同的过程可以是,首先创建一个场景scene,然后创建一个line对象和一个polygon对象,再使用scene的add()函数将 line和polygon添加到scene,最后通过视口view就可以看到了。乍看起来,后者似乎更加复杂,但是,如果你的图像中包含了成千上万的直 线、多边形之类,管理这些对象要比管理QPainter的draw语句容易得多。并且,这些图形对象也更加符合面向对象的设计要求:一个很复杂的图形可以 很方便的复用。
M-V架构的意思是,Graphics View提供一个model和一个view。所谓model就是我们添加的种种对象,所谓view就是我们观察这些对象的视口。同一个model可以由很 多view从不同的角度进行观察,这是很常见的需求。使用QPainter就很难实现这一点,这需要很复杂的计算,而Qt的Graphics View就可以很容易的实现。
Graphics View提供了一个QGraphicsScene作为场景,即是我们添加图形的空间,相当于整个世界;一个QGraphicsView作为视口,也就是我 们观察的窗口,相当于照相机的取景框,这个取景框可以覆盖整个场景,也可以是场景的一部分;一些QGraphicsItem作为图形元件,以便scene 添加,Qt内置了很多图形,比如line、polygon等,都是继承自QGraphicsItem。
下面我们来看一下代码:
#include <QtGui>

class DrawApp : public QWidget {
public :
DrawApp();
protected :
void paintEvent(QPaintEvent *event );
};

DrawApp::DrawApp()
{

}

void DrawApp::paintEvent(QPaintEvent *event )
{
QPainter painter(this );
painter.drawLine(10, 10, 150, 300);
}

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QGraphicsScene *scene = new QGraphicsScene;
scene->addLine(10, 10, 150, 300);
QGraphicsView *view = new QGraphicsView(scene);
view->resize(500, 500);
view->setWindowTitle("Graphics View" );
view->show();

DrawApp *da = new DrawApp;
da->resize(500, 500);
da->setWindowTitle("QWidget" );
da->show();
return a.exec();
}
为了突出重点,我们就直接include了QtGui,不过在实际应用中不建议这么做。这里提供了直线的两种实现:一个是DrawApp使用我们前面介绍的技术,重写paintEvent()函数,这里就不在赘述,重点来看main()函数里面的实现。
首先,我们创建了一个QGraphicsScene作为场景,然后在scene中添加了一个直线,这样就把我们需要的图形元件放到了scene 中。然后创建一个QGraphicsView对象进行观察。就这样,我们就是用Graphics View搭建了一个最简单的应用。运行这个程序来看结果:
第一张图是Graphics View的,第二个是DrawApp的。虽然这两个直线是同样的坐标,但是,DrawApp按照原始坐标绘制出了直线,而Graphics View则按照坐标绘制出直线之后,自动将直线居中显示在view视口。你可以通过拖动Graphics View来看直线是一直居中显示的。
这里仅仅是一个很简单的对比,不过你已经可以看到Graphics View功能的强大。仅这一个居中的操作,如果你是用QPainter,就需要很大的计算量了!当然,如果你不需要这种居中,Graphics View也是可以像QPainter绘制的一样进行显示的。

本文出自 “豆子空间 ” 博客,请务必保留此出处http://devbean.blog.51cto.com/448512/241186

分享到:
评论

相关推荐

    QT图形视图框架(The Graphics View Framework)详细介绍

    图形视图框架(Graphics View Framework)是Qt库中的一个组件,专门用于管理大量的二维图形对象以及处理它们之间的交互。这个框架由多个类组成,提供了灵活和高效的场景管理、事件处理和渲染机制,支持开发者创建...

    QT 整理的Graphics View 的一些例子

    QT Graphics View Framework 是一个强大的图形视图框架,用于在Qt应用程序中创建复杂的、交互式的2D图形用户界面。这个框架提供了丰富的功能,如缩放、旋转、拖动以及高效的图形渲染,非常适合开发需要大量视觉元素...

    Qt图片浏览器 --基于Qt的Graphics View Framework

    Qt 图片浏览器是基于Qt库中的Graphics View Framework构建的一款应用,它主要用于展示和浏览多媒体中的图像。Qt是一个跨平台的C++图形用户界面应用程序开发框架,广泛应用于桌面、移动以及嵌入式设备。Graphics View...

    Qt Graphic-View框架学习代码示例

    Graphics View Framework 提供了一个强大且灵活的工具集,用于创建可交互的 2D 图形界面,并且支持丰富的图形操作和事件处理。无论是创建游戏、数据可视化还是绘制图表,Graphics View Framework 都能够满足各种需求...

    Qt学习之路2

    在深入探讨文档内容前,需明确“Qt学习之路2”这篇文档的主要目的是指导初学者如何学习和掌握Qt框架,这是一个广泛应用于软件开发中的跨平台C++图形用户界面应用程序框架。文档由Andy_Liu整理,包含了大量的章节,从...

    Qt学习之路.pdf

    ### Qt学习之路知识点总结 #### 一、基础知识与入门 - **Hello, World!** - **知识点**:Qt环境搭建、第一个Qt程序编写、基本的窗口显示。 - **重要性**:作为Qt初学者的第一课,通过简单的示例程序帮助理解Qt的...

    Qt+学习之路+2

    ### Qt 学习之路2 知识点梳理 #### 1. 序言 - **背景**: 本文档是基于作者之前的一个系列教程——《Qt学习之路》的更新版本,旨在适应Qt的新版本和发展趋势。 - **目的**: 更新和完善原有教程内容,使其更适合Qt 4....

    Qt学习之路源码

    2. **35**:可能涵盖的是Qt的图形视图框架(Graphics View Framework),用于处理复杂的2D图形渲染和交互,如拖放、缩放、旋转等操作。 3. **40**:这可能涉及到Qt的网络编程模块,如使用QNetworkAccessManager进行...

    Qt学习之路---尤其适用Qt初学者

    12. **Graphics View Framework** —— 探索Qt的图形视图框架,用于构建复杂的图形用户界面。 13. **国际化** —— 学习如何使应用程序支持多语言,提高应用的全球化能力。 14. **Qt容器类** —— 介绍Qt提供的各种...

    其实这本PDF就是Qt学习之路第一版

    ### Qt学习之路知识点总结 #### 一、前言:Qt简介与选择 - **Qt**是一种跨平台的应用程序开发框架,广泛应用于桌面、移动设备及嵌入式系统的GUI应用程序开发。 - C++的GUI编程并非C++标准的一部分,因此开发者在...

    QT学习之路2 (1~82篇)

    30. Graphics View Framework 31. 贪吃蛇游戏(1) 32. 贪吃蛇游戏(2) 33. 贪吃蛇游戏(3) 34. 贪吃蛇游戏(4) 35. 文件 36. 二进制文件读写 37. 文本文件读写 38. 存储容器 39. 遍历容器 40. 隐式数据共享 41. ...

    QT第四版精简

    4. "Qt 学习之路 2(30):Graphics View Framework DevBean's World.htm":Graphics View Framework是Qt提供的一种强大的图形渲染和交互框架,用于处理复杂的2D图形和场景。这篇教程可能讲解了如何使用这个框架来...

    QT学习之路

    ### QT学习之路知识点总结 #### 一、前言:为何选择Qt? - **Qt与C++ GUI编程**:Qt是C++的一种GUI编程框架,并非C++标准的一部分。相比之下,Java有内置的AWT/Swing支持,而C++提供了多种第三方库作为GUI编程的...

    qt学习之路

    - **Graphics View Framework**:探讨Qt的Graphics View Framework,这是一种用于构建复杂的绘图场景的强大框架。 - **国际化支持**:介绍如何使应用程序支持多种语言和地区设置,包括资源文件的使用、翻译流程等。 ...

    Qt学习之路2 (基于Qt5.0.1共58章)

    30. Graphics View Framework 31. 贪吃蛇游戏(1) 32. 贪吃蛇游戏(2) 33. 贪吃蛇游戏(3) 34. 贪吃蛇游戏(4) 35. 文件 36. 二进制文件读写 37. 文本文件读写 38. 存储容器 39. 遍历容器 40. 隐式数据共享 41. ...

    Qt学习之路

    ### Qt学习之路知识点详解 #### 一、前言:Qt简介及优势 - **Qt**是一种跨平台的应用程序开发框架,主要使用C++语言编写,同时也支持Qt Quick和QML来构建用户界面。Qt框架提供了丰富的API,可以用于开发桌面应用、...

    Qt学习之路(1-60)

    学习者可以了解到如何使用Graphics View Framework来实现复杂的图形应用程序,例如简易画板。 ### 国际化 当应用程序需要支持多种语言时,国际化就显得尤为重要。Qt通过提供翻译工具及类库来帮助开发者实现应用程序...

Global site tag (gtag.js) - Google Analytics