有了之前的一些基础,现在开始讲图形项和场景。前面我花了整整两节来详细讲述了绘图的坐标系,大家一定要好好理解一下。

现在我们介绍场景和图元。我换一种讲解思路,讲完图元以后就开始直接讲场景坐标系统。

所谓图形项,比如你玩的坦克大战游戏,这个坦克可以随意运动,它整体就是一个图形项,它可以发出子弹,每个子弹也是图形项。我们可以定义一个图形项,然后把它放在场景里,并控制它的运动。

我们实现如下代码:(具体头文件大家包含一下就行了。)

        QGraphicsScene *scene;QGraphicsRectItem *item,*item2;QGraphicsView *view ,*view2;scene = new QGraphicsScene;item = new QGraphicsRectItem(0, 0, 100, 100);item2 = new QGraphicsRectItem(200, 100, 110, 100);scene->addItem(item);scene->addItem(item2);//第三个参数 const QTransform &deviceTransform//if (scene.itemAt(30, 30, QTransform()) == item)//DebugText::getDebugText()->addContents("right ! ");scene->setForegroundBrush(QColor(255,255,0,100));scene->setBackgroundBrush(QColor(255,0,0,120));view = new QGraphicsView(scene);view->setForegroundBrush(QColor(255, 255, 0, 100));view->setBackgroundBrush(QPixmap("./ShowDebug/background.png"));//view->resize(400, 300);view->show();view->setDragMode(QGraphicsView::RubberBandDrag);view2 = new QGraphicsView(scene);//view2->resize(400,300);view2->setDragMode(QGraphicsView::ScrollHandDrag);view2->show();

首先我们定义了一个场景,所谓场景,就是一片虚拟区域,这个区域是有坐标轴的,和之前的setWindow的坐标轴一样。然后你可以定义两个item,并通过addItem把它们放到场景中去。之后再通过:

 scene->setForegroundBrush(QColor(255,255,0,100));scene->setBackgroundBrush(QColor(255,0,0,120));

之后我们设置 QGraphicsView ,和之前的setViewport 相似,这里的view也代表了实际物理区域的坐标,最左上角是0,0.最右下角是(width(),height()),之后我们通过图片给view设置了背景。

view->setDragMode(QGraphicsView::RubberBandDrag);

这个函数是用来设置手型抓取移动屏幕的函数。以及后面有个类似的函数设置滚轮移动。

之间有两行函数:

if (scene.itemAt(30, 30, QTransform()) == item)DebugText::getDebugText()->addContents("right ! ");

这个是用来查看在场景中30,30的图形项是不是我们之前定义的item,如果是就调试框显示一个right。

注意view2因为绑定的是scene,它的场景就全都是由scene构成的,而不像view对象一样里面有图片背景。

显示如下:

放大以后显示如下:

注意到这个view是由多个图片拼接形成的,现在的情况是因为我们没有设置view和scene的对应关系,所以QT自动把图形项显示在中心区域,而不是把scene的坐标原点定义在最中心(虽然图形项显示的不清楚,仔细看还是能看出来这两个正方形的)。左上的图形项的左上角对应场景区域的(0,0)点,也就是坐标原点,而再往左,场景区域的值就变为负值了。

我们下次就把scene和view定义在一起,这样就能让scene的坐标和view的坐标相等了。

QT图形显示和处理5相关推荐

  1. Qt知识点汇总——来自网络

    为什么80%的码农都做不了架构师?>>>    1.程序可以显示中文 #include <QTextCodec> QTextCodec::setCodecForTr(QT ...

  2. 【Qt for Android】OpenGL ES 绘制彩色立方体

    Qt 内置对OpenGL ES的支持.选用Qt进行OpenGL ES的开发是很方便的,很多辅助类都已经具备.从Qt 5.0開始添加了一个QWindow类,该类既能够使用OpenGL绘制3D图形,也能够 ...

  3. 64位Ubuntu 12.04下搭建嵌入式Qt(4.8.6)、QtCreator、qvfb过程全记录

    最新公司搞一个新项目,需要在Linux下进行UI界面设计.选来选去,最后选择采用Qt平台来做,于是要开始研究一下Qt. Qt作为业内最著名的UI开发工具之一,是一套完整的跨平台C++图形用户界面应用程 ...

  4. python导入数据库的数据怎么在qt界面里刷新_Python中使用pyqtgraph库实现数据可视化之逐点刷新波形图...

    背景 pyqtgraph是Python平台上一种功能强大的2D/3D绘图库,相对于matplotlib库,由于内部实现方式上,使用了高速计算的numpy信号处理库以及Qt的GraphicsView框架 ...

  5. Qt、GTK 和KDE、GNOME的关系-转

    Linux 下的图形库介绍 在进行Linux下的图形系统编程时,我们常常会遇到以下这些概念: Framebuffer, X11, SDL,DFB, miniGUI, OpenGL,QT, GTK,KD ...

  6. c gui qt 4编程第二版_一本专门学习PyQt5 GUI编程的书

    Python作为一个开源的解释型编程软件,在教学.科研.实际项目中用得越来越多.Python易学易用,程序资源丰富,在编程解决一些科学计算问题时比较实用,但是Python自带的Tkinter包设计GU ...

  7. qt web混合编程_基于Qt与MATLAB的混合编程技术

    摘要:在Qt雷达仿真系统中,数据处理及图形显示尤为重要.本文为此提出了一种Qt与MATLAB混合编程的方法.通过VC++和MATLAB混合编程技术,将MATLAB函数封装成动态链接库,Qt调用这个动态 ...

  8. Qt编程(一) Qt框架简介

    1.Qt5 架构 qt 5将所有模块分为三个部分:Qt基本模块(Essentials).Qt扩展模块(Add-ons). 开发工具(Tools) 基本模块定义了基础功能,是核心,兼容所有平台.包括: ...

  9. QT Quick项目简介

     在Qt 4中,Qt Quick只是在QGraphicsView之上做了简单的封装,并通过QtScript和JavaScript来为其提供脚本支持.基于QGraphicsView之上的QML在功能上仅 ...

  10. Qt学习之显示类的控件(QLabel、QTextBrowser、QGraphicsView、QCalendarWidget、QWebView、QProgressBar、QOpenGLWidget)

    本文转自:<Qt编程指南>        作者:奇先生 Qt编程指南,Qt新手教程,Qt Programming Guide 5.5 显示类的控件 本节显示类控件是指作为显示用途的控件,本 ...

最新文章

  1. HTC Element Behaviors in Internet Explorer.
  2. java-mybatis环境搭建
  3. c++学习4 -- 输入输出
  4. 030_CSS外边距合并
  5. 权重初始化时除以前一层的神经元个数开方的意义
  6. 计算机系统通过执行通道程序完成数据,批量数据传送
  7. Android FTP Server 1
  8. Iphone如何应对华为鸿蒙系统,鸿蒙2.0向iOS看齐 系统解决了 芯片怎么办?
  9. html显示文件代码提示,代码提示和代码完成
  10. 探秘Spring AOP(下)
  11. 了解PostCSS原理
  12. Java数据持久层框架 MyBatis之API学习五(Mapper XML 文件)
  13. 现代软件工程第六章作业
  14. 空间三维技术重现“山水林田湖草”管理沙盘
  15. cnn程序流程图_深度学习(一)——CNN算法流程
  16. 什么是数据恢复工具,一款一键恢复软件
  17. Jrebel使用+激活码
  18. SAN(存储区域网络),WWN, WWPN,WWNN区别
  19. 波士顿法律第一至五季/全集Boston Legal迅雷下载
  20. pyton对Quoted-printable进行编码和解码

热门文章

  1. 极客大挑战--PHP
  2. u盘安装linux系统有什么弊端,使用U盘安装Linux系统的经验总结
  3. 【Python量化】蒙特卡洛模拟法进行期权定价
  4. [Noi2010]航空管制
  5. 赛式方法论(上):为什么你的游戏做不完、做得烂?
  6. 电脑网络连接正常,但浏览器无法打开网页的原因和解决方法
  7. Docker-in-Docker: Jenkins CI 内部如何运行 docker
  8. 获取路由器内的ADSL上网账号和密码或者获取电脑内的ADSL上网账号和密码教程(by 星空武哥)
  9. 百度API查询经纬度小页面
  10. 360浏览器是ie浏览器吗?有什么区别