35.QT蝴蝶飞舞
- fly.h
#ifndef FLY_H
#define FLY_H
#include <QObject>
#include <QPainter>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QGraphicsItem>
#include <QPixmap>
#include <math.h>
#include <QTime>
#include <QEvent> //图元对象
class fly : public QObject,public QGraphicsItem
{
Q_OBJECT
public:
explicit fly(QObject *parent = nullptr); //区域
QRectF boundingRect() const;
//时间定时器
void timerEvent(QTimerEvent *event);
signals: public slots: protected:
//绘制
void paint(QPainter *painter,const QStyleOptionGraphicsItem *option,QWidget *widget); public:
bool up;
QPixmap pix_up;
QPixmap pix_down; qreal angle; }; #endif // FLY_H - fly.cpp
#include "fly.h" fly::fly(QObject *parent) : QObject(parent)
{
//载入
up = true;
pix_up.load("up.png");
pix_down.load("down.png"); startTimer();
} //图元的边界区域
QRectF fly::boundingRect() const
{
qreal angletemp = ;
return QRectF(-pix_up.width()/-angletemp,
-pix_up.height()/-angletemp,
pix_up.width()+angletemp*,
pix_up.height()+angletemp*);
} //定时器函数
void fly::timerEvent(QTimerEvent *event)
{
//边界控制
qreal edgex = scene()->sceneRect().right()+boundingRect().width()/;
qreal edgetop=scene()->sceneRect().top()+boundingRect().height()/;
qreal edgebottom = scene()->sceneRect().bottom()+boundingRect().height()/; if(pos().x()>=edgex)
setPos(scene()->sceneRect().left(),pos().y());
if(pos().y()<=edgetop)
setPos(pos().x(),scene()->sceneRect().bottom());
if(pos().y()>=edgebottom)
setPos(pos().x(),scene()->sceneRect().top()); #define PI 3.14
angle += (qrand() % )/20.0;
qreal dx = fabs(sin(angle*PI)*);
qreal dy = (qrand()%)-10.0; //设置位置,转换坐标
setPos(mapToParent(dx,dy));
} void fly::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
if(up)
{
painter->drawPixmap(boundingRect().topLeft(),pix_up);
up = !up;
}
else
{
painter->drawPixmap(boundingRect().topLeft(),pix_down);
up = !up;
}
} - main.cpp
#include "dialog.h"
#include <QApplication>
#include <QGraphicsScene>
#include <QGraphicsView>
#include "fly.h" int main(int argc, char *argv[])
{
QApplication a(argc, argv); //创建图像场景
QGraphicsScene *scene = new QGraphicsScene;
//设置区域
scene->setSceneRect(-,-,,); fly *f = new fly;
f->setPos(-,);
scene->addItem(f); QGraphicsView *view = new QGraphicsView;
view->setScene(scene);
view->resize(,);
view->show(); return a.exec();
}
35.QT蝴蝶飞舞的更多相关文章
- Qt-MVC图形视图框架初识
使用QPushButton.QLabel.QCheckBox等构成GUI的控件或自定义图形时,开发应用程序会变得很简单.但是如果想在GUI中使用数十个或者数百个图形对象,向用户完美展示控制场景,则会受 ...
- Linux - 变量
printenv - print all or part of environment 显示所有变量:print 显示某个变量:print <variable name> 或者 echo ...
- Ubuntu终端命令行不显示颜色
在网上找到的一个有效方案是在.bash_profile 中增加颜色定义 export LS_COLORS='di=01;35:ln=01;36:pi=40;33:so=01;35:do=01;35:b ...
- ubuntu 14.04 下找不到命令,路径出错
在安装一些东西时,可能操作上不小心把路径覆盖或打错,造成一些基本命令如ls mkdir等无法使用,就会出现以下提示错误. 错误: 由于/usr/bin 不在PATH 环境变量中,故无法找到该命令 根本 ...
- crontab不能正确执行的问题
近期在部署crontab任务的时候,总是遇到在shell中单独执行正常,但是放到crontab定时执行出错的问题.若出现这类场景,九成就是环境变量的问题. 因为我的定制任务,基本上都需要使用sqlpl ...
- python模块(os)
os模块 os模块提供了许多与操作系统交互的接口 os.getcwd() -> str # 返回当前路径, 相当于pwd os.chdir("dirname") -> ...
- 查看linux系统常用的命令,Linux查看系统配置常用命令
一.linux CPU大小 cat /proc/cpuinfo |grep "model name" && cat /proc/cpuinfo |grep &qu ...
- ansible官方文档翻译之变量
Ansible变量 在使用ansible变量的时候,主要是因为各个系统的不同,从而需要使用不同的变量来进行设置,例如在设置一些配置文件的时候,有大部分内容是相同的,但是一部分内容是和主机的ip地址或者 ...
- 6款基于SVG的HTML5应用和动画
1.HTML5 SVG 3D蝴蝶飞舞动画 逼真超酷 这次我们要分享的这款HTML5动画简直就是逆天,利用SVG制作的3D蝴蝶飞舞动画,蝴蝶飞舞动画非常逼真,蝴蝶飞舞的路线是利用SVG构造的.另外,动画 ...
随机推荐
- C# 委托、事件
委托(delegate) 访问修饰符 delegate 返回值类型 委托名 (参数列表) 委托是一种可以把引用存储为函数的类型,也就是说它声明了一种用于保存特定格式函数的数据类型,如图C++中的函数指 ...
- C# 学习笔记_类
定义:将成员及方法封装到类中,类的实例则称为对象. 结构:属性,类修饰符,class,类名,{类体} 类修饰符:new,public,protected,internal,private,abstra ...
- undefined reference to “boost” in Qt—Ubuntu
一:使用PCL时遇到的问题 原因:缺少boost的lib包含: 在Pro文件里面添加: LIBS += -lboost_system .....................等库文件包含 二:编译B ...
- 杭电 1012 u Calculate e【算阶乘】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1012 解题思路:对阶乘递归求和 反思:前面3个的输出格式需要注意,可以自己单独打印出来,也可以在for ...
- 移动端的0.5px
最近写移动端页面写的比较多,边边基本上都是用的1px,视觉上也确实有点小粗,这不闲下来啦,具体的研究了下0.5px是怎么实现的,切记,这个效果只有在手机上才能看到效果的 利用了css3的缩放效果 &l ...
- JS 从36个数字里面随机抽取8个
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- centos7安装nginx(基础篇)
安装所需环境 Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Windows 版本,本篇则使用 CentOS 7 作为安装环境. 一. gcc 安装安装 nginx 需要先 ...
- 工作中常见的Git本地分支与远程分支同步场景
Git 是一个开源的分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理. 一直以来本人使用 Git 处理分支都是现用现查,一是因为怕出错,二还是因为懒,作为一名四年开发经验的前端 ...
- XSS Chanllenges 11-15
Stage #11 根据提示,发现正则匹配,过滤掉了很多关键字 除on 事件和script 事件外,能执行js 代码的还有a 标签构造的超链接 构造 "><a href=java ...
- P3378 【模板】堆
题目描述 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 输出该小根堆内的最小数 操作3: 3 删除该小根堆内的最小数 输入输出格式 输入格式: ...