QT图形显示和处理5
有了之前的一些基础,现在开始讲图形项和场景。前面我花了整整两节来详细讲述了绘图的坐标系,大家一定要好好理解一下。
现在我们介绍场景和图元。我换一种讲解思路,讲完图元以后就开始直接讲场景坐标系统。
所谓图形项,比如你玩的坦克大战游戏,这个坦克可以随意运动,它整体就是一个图形项,它可以发出子弹,每个子弹也是图形项。我们可以定义一个图形项,然后把它放在场景里,并控制它的运动。
我们实现如下代码:(具体头文件大家包含一下就行了。)
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相关推荐
- Qt知识点汇总——来自网络
为什么80%的码农都做不了架构师?>>> 1.程序可以显示中文 #include <QTextCodec> QTextCodec::setCodecForTr(QT ...
- 【Qt for Android】OpenGL ES 绘制彩色立方体
Qt 内置对OpenGL ES的支持.选用Qt进行OpenGL ES的开发是很方便的,很多辅助类都已经具备.从Qt 5.0開始添加了一个QWindow类,该类既能够使用OpenGL绘制3D图形,也能够 ...
- 64位Ubuntu 12.04下搭建嵌入式Qt(4.8.6)、QtCreator、qvfb过程全记录
最新公司搞一个新项目,需要在Linux下进行UI界面设计.选来选去,最后选择采用Qt平台来做,于是要开始研究一下Qt. Qt作为业内最著名的UI开发工具之一,是一套完整的跨平台C++图形用户界面应用程 ...
- python导入数据库的数据怎么在qt界面里刷新_Python中使用pyqtgraph库实现数据可视化之逐点刷新波形图...
背景 pyqtgraph是Python平台上一种功能强大的2D/3D绘图库,相对于matplotlib库,由于内部实现方式上,使用了高速计算的numpy信号处理库以及Qt的GraphicsView框架 ...
- Qt、GTK 和KDE、GNOME的关系-转
Linux 下的图形库介绍 在进行Linux下的图形系统编程时,我们常常会遇到以下这些概念: Framebuffer, X11, SDL,DFB, miniGUI, OpenGL,QT, GTK,KD ...
- c gui qt 4编程第二版_一本专门学习PyQt5 GUI编程的书
Python作为一个开源的解释型编程软件,在教学.科研.实际项目中用得越来越多.Python易学易用,程序资源丰富,在编程解决一些科学计算问题时比较实用,但是Python自带的Tkinter包设计GU ...
- qt web混合编程_基于Qt与MATLAB的混合编程技术
摘要:在Qt雷达仿真系统中,数据处理及图形显示尤为重要.本文为此提出了一种Qt与MATLAB混合编程的方法.通过VC++和MATLAB混合编程技术,将MATLAB函数封装成动态链接库,Qt调用这个动态 ...
- Qt编程(一) Qt框架简介
1.Qt5 架构 qt 5将所有模块分为三个部分:Qt基本模块(Essentials).Qt扩展模块(Add-ons). 开发工具(Tools) 基本模块定义了基础功能,是核心,兼容所有平台.包括: ...
- QT Quick项目简介
在Qt 4中,Qt Quick只是在QGraphicsView之上做了简单的封装,并通过QtScript和JavaScript来为其提供脚本支持.基于QGraphicsView之上的QML在功能上仅 ...
- Qt学习之显示类的控件(QLabel、QTextBrowser、QGraphicsView、QCalendarWidget、QWebView、QProgressBar、QOpenGLWidget)
本文转自:<Qt编程指南> 作者:奇先生 Qt编程指南,Qt新手教程,Qt Programming Guide 5.5 显示类的控件 本节显示类控件是指作为显示用途的控件,本 ...
最新文章
- HTC Element Behaviors in Internet Explorer.
- java-mybatis环境搭建
- c++学习4 -- 输入输出
- 030_CSS外边距合并
- 权重初始化时除以前一层的神经元个数开方的意义
- 计算机系统通过执行通道程序完成数据,批量数据传送
- Android FTP Server 1
- Iphone如何应对华为鸿蒙系统,鸿蒙2.0向iOS看齐 系统解决了 芯片怎么办?
- html显示文件代码提示,代码提示和代码完成
- 探秘Spring AOP(下)
- 了解PostCSS原理
- Java数据持久层框架 MyBatis之API学习五(Mapper XML 文件)
- 现代软件工程第六章作业
- 空间三维技术重现“山水林田湖草”管理沙盘
- cnn程序流程图_深度学习(一)——CNN算法流程
- 什么是数据恢复工具,一款一键恢复软件
- Jrebel使用+激活码
- SAN(存储区域网络),WWN, WWPN,WWNN区别
- 波士顿法律第一至五季/全集Boston Legal迅雷下载
- pyton对Quoted-printable进行编码和解码
热门文章
- 极客大挑战--PHP
- u盘安装linux系统有什么弊端,使用U盘安装Linux系统的经验总结
- 【Python量化】蒙特卡洛模拟法进行期权定价
- [Noi2010]航空管制
- 赛式方法论(上):为什么你的游戏做不完、做得烂?
- 电脑网络连接正常,但浏览器无法打开网页的原因和解决方法
- Docker-in-Docker: Jenkins CI 内部如何运行 docker
- 获取路由器内的ADSL上网账号和密码或者获取电脑内的ADSL上网账号和密码教程(by 星空武哥)
- 百度API查询经纬度小页面
- 360浏览器是ie浏览器吗?有什么区别