• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > Qt实现图片移动实例(图文教程)

Qt实现图片移动实例(图文教程)

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了qt界面设计实例,qt 多线程实例,qt程序设计实例,qt网络编程实例,qt串口编程实例等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

这学期实训的时候用MFC做过一个飞机大战,很无聊的东西,一直想用Qt做一个,但是在学校的时候比较颓,回来看了一下。

首先需要解决的问题是图片的移动,怎么说飞机啊子弹啊都是动着的,图片当然要跑起来。

闲话休絮,首先用QtCreator新建一个QtGui程序,命名为PaintWidget,随便起的名字,实验么这不是。

会生成这三个文件,其中呢ui不用管,实验的图片移动需要用的是Event,不是信号槽,所以ui就不管了,放了那就是。

第一步要把图片画出来,参照《Qt学习之路的这段代码》,不难把图画出来,就是重写paintEvent方法,用QPainter对象来画图。

问题是如何使用图片资源:

在《C++ GUI Qt4 编程 (第二版)》这本书中有例子,直接搜这本书的源代码,在src\chap04有发现,原来Qt引用资源是用的资源文件这个东西,是一个xml,QtCreator中很方便管理。

首先是在项目中添加文件,选择Qt的资源文件:

  

因为以后可能有很多图片,所以我在工程目录下新建了img这么个文件夹来存放图片。

生成的资源文件里面有个添加前缀,这个是qt中引用资源需要用的,后面再说,添加文件不用啰嗦了。

为了方便说明,先把源代码发上来

mainwindow.h 

QRect*catImgRect;是这个图片的矩形信息,以为图片移动的时候图片的x,y坐标的值会改变,矩形信息会改变,而绘图函数里面有个根据矩形信息和图片指针绘制函数的这么一个函数

painter.drawPixmap(*catImgRect,*catImg);

为了方便起见,用catImgRect来存储这些信息。

而int shrinkMultiple;这个是图片的缩放倍数,我猫的图片有点儿大,把他缩小了一下,当然可以没有

这个int speed;则是图片移动的像素数

ok,下面是mainwindow.cpp

下面几行是缩小猫的图片和初始化猫矩形信息,最后一行是把程序窗口大小设这为猫图片大小的4倍。

画图函数就是paintEvent这个函数,没什么特别说的,这个函数只要是窗口一被重绘就会调用的。

关键的移动就是重写

图片移动是没有问题了,关键是不是很流畅,当时用MFC的时候是用定时器来解决的这个问题,Qt中也有定时器,改天再研究,不过可能会出现问题,就是窗口闪烁的问题,这个时候应该会用到双缓冲画图的技术。

贴个最终的图片

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Qt实现图片移动实例(图文教程)

相关文章

  • 2017-05-28c语言实现24小时制转换为12小时制示例
  • 2017-05-28用C语言判断一个二叉树是否为另一个的子结构
  • 2017-05-28C++利用容器查找重复列功能实现
  • 2017-05-28c语言实现的hashtable分享
  • 2017-05-28C语言中时间戳转换成时间字符串的方法
  • 2017-05-28C语言实现在数组A上有序合并数组B的方法
  • 2017-05-28用c语言实现冒泡排序,选择排序,快速排序
  • 2017-05-28Windows网络编程之winsock实现文件传输示例
  • 2022-04-30数据在内存中的存储(二进制形式存储)
  • 2017-05-28使用Inotify 监控目录与文件的方法详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Swift编程中的泛型解析
    • NKOJ3843 2357数
    • 统计输入字符各个字母出现频率的解题思路
    • 详解Bucket Sort桶排序算法及C++代码实现示例
    • 解析C++编程中的#include和条件编译
    • 在屏幕上输出各种类型的数据
    • C++文件上传、下载工具
    • c++中new的三种用法详细解析
    • STl中的排序算法详细解析
    • C++中memcpy和memmove的区别总结

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有