• 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蝴蝶飞舞的更多相关文章

  1. Qt-MVC图形视图框架初识

    使用QPushButton.QLabel.QCheckBox等构成GUI的控件或自定义图形时,开发应用程序会变得很简单.但是如果想在GUI中使用数十个或者数百个图形对象,向用户完美展示控制场景,则会受 ...

  2. Linux - 变量

    printenv - print all or part of environment 显示所有变量:print 显示某个变量:print <variable name> 或者 echo ...

  3. Ubuntu终端命令行不显示颜色

    在网上找到的一个有效方案是在.bash_profile 中增加颜色定义 export LS_COLORS='di=01;35:ln=01;36:pi=40;33:so=01;35:do=01;35:b ...

  4. ubuntu 14.04 下找不到命令,路径出错

    在安装一些东西时,可能操作上不小心把路径覆盖或打错,造成一些基本命令如ls mkdir等无法使用,就会出现以下提示错误. 错误: 由于/usr/bin 不在PATH 环境变量中,故无法找到该命令 根本 ...

  5. crontab不能正确执行的问题

    近期在部署crontab任务的时候,总是遇到在shell中单独执行正常,但是放到crontab定时执行出错的问题.若出现这类场景,九成就是环境变量的问题. 因为我的定制任务,基本上都需要使用sqlpl ...

  6. python模块(os)

    os模块 os模块提供了许多与操作系统交互的接口 os.getcwd() -> str # 返回当前路径, 相当于pwd os.chdir("dirname") -> ...

  7. 查看linux系统常用的命令,Linux查看系统配置常用命令

    一.linux CPU大小  cat /proc/cpuinfo |grep "model name" && cat /proc/cpuinfo |grep &qu ...

  8. ansible官方文档翻译之变量

    Ansible变量 在使用ansible变量的时候,主要是因为各个系统的不同,从而需要使用不同的变量来进行设置,例如在设置一些配置文件的时候,有大部分内容是相同的,但是一部分内容是和主机的ip地址或者 ...

  9. 6款基于SVG的HTML5应用和动画

    1.HTML5 SVG 3D蝴蝶飞舞动画 逼真超酷 这次我们要分享的这款HTML5动画简直就是逆天,利用SVG制作的3D蝴蝶飞舞动画,蝴蝶飞舞动画非常逼真,蝴蝶飞舞的路线是利用SVG构造的.另外,动画 ...

随机推荐

  1. P3805 【模版】manacher算法

    题目描述 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 字符串长度为n 输入输出格式 输入格式: 一行小写英文字符a,b,c...y,z组成的字符串S 输出格 ...

  2. [OpenWrt]安装mjpg-streamer

    安装mjpg-streamer 远程监控基本上是wifi小车的一个必备功能了.摄像头我用的是奥尼百脑通 D881,这个要100左右. 确认安装了以下软件: kmod-usb2 kmod-video-u ...

  3. 写给VC++ Windows开发的初学者 一片不错的博文

    不知不觉2010年都过了半年了,想来我学C语言已经12个年头了(从1998年开始),用VC++也有11年了,最早使用Turbo C2.0 ,也学过汇编,后来使用Borland C++3.0 .Micr ...

  4. Algorithms算法题<1.1>

    1.1.27 二项分布.估计用一下代码计算binomial(100,50,0.25)将会产生的递归调用次数: public static double binomial(int N,int k,dou ...

  5. 详解优动漫PAINT中的图层模式

    使用优动漫PAINT绘制漫画或者插画的时候,在其新建画布区域有一个基本颜色模式的选项,分别包括彩色模式.灰度模式和黑白位图模式,那么这三个模式有什么区别呢,我们在绘图的时候应该如何选择呢? 彩色模式: ...

  6. Java中数组的概念与特点

    数组概念: 数组其实也是一个容器,可以用来存储固定个数相同类型的数据数组的定义 数组中存储的数据叫做元素 特点: 1.数组是引用数据类型 2.数组的长度是固定的,也就是说可以存储固定个数的数据 3.数 ...

  7. 计蒜客 第 m 大的身份证号码 (水)

    链接 : Here! 思路 : 水题 代码 : #include <cstdio> #include <string> #include <iostream> #i ...

  8. 提高生产力:SpringMVC中,使用扩展数据类型TypedMap接收Web请求参数

    在Web项目中,如果前端MVC框架使用的是SpringMVC,可以使用Map接收前端请求参数,比bean要方便很多. 尤其是SpringMVC和Mybatis一起用的时候,用Map大大减少了需要的be ...

  9. C语言与java的区别

    相同的地方: 1.语法类似:由于Java可以算是从C++发展而来的,因此Java与C语言的语法比较类似 2.编程的熟练程度就是对语言程序库的掌握程度: 从某种程度上来说,编程语言都是由语法和相应的程序 ...

  10. 【Codeforces Round #505 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final) B】Weakened Common Divisor

    [链接] 我是链接,点我呀:) [题意] 给你n个数对(ai,bi). 让你求一个大于1的数字x 使得对于任意的i x|a[i] 或者 x|b[i] [题解] 求出第一个数对的两个数他们有哪些质因子. ...