paip.提升用户体验-----c++ 实现360浏览器收藏动作星星动画效果

作者Attilax ,  EMAIL:1466519819@qq.com 
来源:attilax的专栏
地址:http://blog.csdn.net/attilax

c++星星动画效果分解。:

主要是4个动画效果,
一个是放大缩变效果:这个前半段起效果.
一个是位移效果,这个这个效果全程进行
 一个旋转效果:这个效果全程进行
 最后一个缩小效果,,,后半段生效.

c++动画单个流程分解:代码太复杂,,仅仅以移动效果为例子..

int fps=24;
 int  millsecs=2000;  //动画执行毫秒数...重要..
 
int time_span=1000/fps;    //这个做为定时器运行时间间隔

//以下代码计算每次位移像素..
 int fps_count=fps*sec/1000;
x_span=(float)(x_max-x_mini)/(float)fps_count;

//以下代码计算出本次实际位置。
    x_cur=x_cur+x_span;
    y_cur=y_cur+y_span;

c++的实现总结.:
///
 放大缩变效果, 旋转效果,缩小效果, 位移效果分别有一个定时器控制..
 代码量不少。。写了五个类。。
 增加了cli接口,可以供其他程序调用.

不规则透明窗体的实现方式:

一种是设置窗体的掩码图像;
另一种是设置窗体背景透明,然后重写其绘图函数,将背景图绘制上去。

//must set falg togethoer.. 这几个参数要一起使用,贝儿走最后一个生效.
    setWindowFlags( Qt::FramelessWindowHint
    | Qt::WindowStaysOnTopHint |Qt::Tool );
 this->setAttribute(Qt::WA_TranslucentBackground);//设置背景透明
  menuBar()->hide();    //隐藏菜单栏.
 ui->mainToolBar->hide();  //隐藏工具栏.
 ui->statusBar->hide();  //隐藏缩放手柄
  QPixmap1.load("C:\\favstar\\star.png");//加载图像
  
  
  
void IrregularForm2::paintEvent(QPaintEvent * event)
{   
    QPainter painter(this);
    //draw in the top(0,0) in the windows
    QPixmap pix2=QPixmap1.scaled(this->size(), Qt::IgnoreAspectRatio,    Qt::SmoothTransformation);
     painter.drawPixmap(0, 0, pix2);//绘制图像
  }

-----------------部分源码(源码太多,放不哈)---------------
int main(int argc, char *argv[])
{

QApplication a(argc, argv);
    QString  point1=argv[1];
 MainWindow::point_str=point1;
  QProcess *    myprocess;
      myprocess= new QProcess();
    QObject::connect(myprocess, SIGNAL(readyReadStandardOutput()),
    NULL, SLOT(outlog()));
    QString cmd="autohotkey.exe  log.ahk  parm_is@"+point1;
    QDir dir;
   QString path=dir.currentPath();
    myprocess->setWorkingDirectory(path);
    myprocess->start(cmd);
    // For debugging: Wait until the process has finished.
    myprocess->waitForFinished(30000);
    qDebug() << "myprocess error code:" << myprocess->error();
      /*  */

//   if(paraFirst == "-exportArtidNCateid")
//    MainWindow::point_str=point1;
    MainWindow w;
    w.show();

return a.exec();
}

---------------主启动类mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h".
#include <QtWidgets>
#include <QtCore>
#define  IrregularForm2  MainWindow
#include "atimov.h"
#include "atieffectsize.h"
#include  "movup.h"
//#include <private/qwidgetresizehandler_p.h>
//ca1
int fps=30;
int sec=200; //ms
int  size_mini=100;
int fps_count=fps*sec/1000;
int time_span=1000/fps;
float size_cur=0;
float size_span;
QTimer* timer=new QTimer();
ca1
///
  AtiMov* mv= new  AtiMov();

MainWindow::MainWindow(QWidget *parent) :       QMainWindow(parent),ui(new Ui::MainWindow)
{
    ui->setupUi(this);

//窗体置顶..jeig yao feodg front ,beir zeu yeu toolbar l .
    this-> setWindowFlags(  Qt::WindowStaysOnTopHint);

//工具条模式 隐藏任务栏图标 jeig yao feodg front ,beir zeu yeu toolb
//   this->setWindowFlags(    Qt::Tool);
  this->setWindowFlags(Qt::FramelessWindowHint);//设置窗体无边框
    //ma titlevar

//must set falg togethoer..
    setWindowFlags( Qt::FramelessWindowHint
    | Qt::WindowStaysOnTopHint |Qt::Tool );
       this->setAttribute(Qt::WA_TranslucentBackground);//设置背景透明

menuBar()->hide();

//隐藏工具栏.
 ui->mainToolBar->hide();
 //隐藏缩放手柄
 ui->statusBar->hide();
 // menuBar()->setVisible(false);
  //tool
  QAction* openAction = new QAction(tr("&Open"), this);
          openAction->setShortcut(QKeySequence::Open);
          openAction->setStatusTip(tr("Open a file."));

QMenu *file = menuBar()->addMenu(tr("&File"));
          file->addAction(openAction);

QToolBar *toolBar = addToolBar(tr("&File4toolbar"));
          toolBar->addAction(openAction);

toolBar->hide();

QPixmap1.load("C:\\favstar\\star.png");//加载图像
  //       setAutoFillBackground(true);   // 这个属性一定要设置
     //   QPixmap1.load("C:\\favstar\\star.png",0,Qt::AvoidDither|        Qt::ThresholdAlphaDither|        Qt::ThresholdDither);//加载图片,并指明避免图片抖动模式

//   this->resize(QPixmap1.size());
 this->resize(1,1);
//ca1
int size_max=QPixmap1.width();
  size_span=(float)(size_max-size_mini)/(float)fps_count;
size_cur=size_mini;

connect(timer,SIGNAL(timeout()),this,SLOT(moveWin()));
      timer->start(time_span);

//        //new一个QWidgetResizeHandler 对象,this是你要实现移动功能的主窗口
//        QWidgetResizeHandler *h = new QWidgetResizeHandler(this);

//        //设置可移动,可拖拽
//        h->setMovingEnabled(true);

mv->mov_start=  QPoint(1,1);
       mv->mov_end=  QPoint(500,600);
   //mv->start(sec);
  //    QSize
 // QSize mov_end=new QSize(500,600);

//always move up
       //   movUp  up2=  movUp();
   movUp* up=new movUp();

int cur_mouse_x=600;
   int cur_mouse_y=430;

QString point_strx= MainWindow:: point_str;
   if( point_strx!=NULL && point_strx.length()>0)
   {
       QStringList  li=point_strx.split(",");

cur_mouse_x=li.at(0).toInt();
    cur_mouse_y=li.at(1).toInt();
   }   /**/
   up->mov_start=QPoint(cur_mouse_x,cur_mouse_y);//cur mouse
   int mouse_x_end=cur_mouse_x+200;
     int mouse_y_end=cur_mouse_y-300;
     up->mov_end=QPoint(mouse_x_end,mouse_y_end);
 up->win=(QMainWindow*)this;
 up->finish_exit=true;
     up->start(1000);
}

void IrregularForm2::moveWin()   //for float invoke
{
    size_cur=size_span+size_cur;
    int width=size_cur;
     if(width>QPixmap1.width())
     {
         width=QPixmap1.width();
           size_cur=width;
             qDebug()<<" cur size:is all ok";
            timer->stop();

//swasyao
            AtiEffectSize* eSize=new AtiEffectSize();
            eSize->startSize=(QPixmap1.size());
            eSize->endSize=QSize(0,0);
            eSize->start(500);
            eSize->win=(QMainWindow*)this;
             return;

}

//   this->move(mv->x_cur,mv->y_cur);
    this->resize(width,width);

qDebug()<<" cur size:--"<<width;

}

//重写绘图事件

void IrregularForm2::paintEvent(QPaintEvent * event)

{

qDebug()<<" paintEvent--" ;

QPainter painter(this);
    //draw in the top(0,0) in the windows
    QPixmap pix2=QPixmap1.scaled(this->size(), Qt::IgnoreAspectRatio,    Qt::SmoothTransformation);
     painter.drawPixmap(0, 0, pix2);//绘制图像
    //draw in the top(0,0) in the windows
//   painter.drawPixmap(0, 0, QPixmap1);//绘制图像

//      painter.drawPixmap(50, 100, QPixmap1);//绘制图像
    //painter.rotate();
    /*
    QPalette pal(palette());
    pal.setBrush(QPalette::Window, QBrush(QPixmap1.scaled(event->, Qt::IgnoreAspectRatio,Qt::SmoothTransformation)));

setPalette(pal);
    */
}

// 随着窗体变化而设置背景
void IrregularForm2::resizeEvent(QResizeEvent *event)
{
     qDebug()<<" resizeEvent--" ;
//QWidget::resizeEvent(event);
//QPalette pal(palette());
//pal.setBrush(QPalette::Window,
//QBrush(QPixmap1.scaled(event->size(), Qt::IgnoreAspectRatio,
//Qt::SmoothTransformation)));
//setPalette(pal);

}

MainWindow::~MainWindow()
{
    delete ui;
}
-----------------------mov 类
#include "atimov.h"
#include <QObject>

//ca1

ca1
AtiMov::AtiMov(QObject *parent) :
QObject(parent)
{
}

void AtiMov::start(int secs)
{
    //ca1
    int sec=secs; //ms
    int x_mini=this->mov_start.x();
    int y_mini=this->mov_start.y();
     x_max=this->mov_end.x();
     y_max=this->mov_end.y();

int  size_mini=5;
    int fps_count=fps*sec/1000;
    int time_span=1000/fps;
     x_cur=x_mini;
     y_cur=y_mini;

//float size_cur=0;
   // float size_span;
//    int size_max=QPixmap1.width();
      x_span=(float)(x_max-x_mini)/(float)fps_count;
       y_span=(float)(y_max-y_mini)/(float)fps_count;
  //  size_cur=size_mini;

connect(timer,SIGNAL(timeout()),this,SLOT(moveWin()));
          timer->start(time_span);

}

void AtiMov::moveWin()   //for float invoke
{
    x_cur=x_cur+x_span;
    y_cur=y_cur+y_span;
    QPoint pt=  QPoint(x_cur,y_cur);
    //   int width=size_cur;
    if(x_cur>x_max || y_cur>y_max)
    {
        x_cur=x_max;
        y_cur=y_max;
        pt=  QPoint(x_cur,y_cur);

qDebug()<<" cur posit:is all ok";
        timer->stop();
        return;

}

//  this->resize(width,width);
    qDebug()<<" cur poston:--"<<x_cur<<","<<y_cur;

}/*
*/

参考:
                                                                       ^
绘制窗体时防止闪烁 – 【人人分享-人人网】
[QT编程]QT实现不规则窗体和透明窗体 - 程序员小涛 - 博客园.htm
qt显示图片并使其随窗体同步缩放.htm

paip.提升用户体验-----c++ 实现360浏览器收藏动作星星动画效果相关推荐

  1. paip.提升用户体验--提升java的热部署热更新能力

    paip.提升用户体验--提升java的热部署热更新能力 想让java做到php那么好的热部署能力  "fix online"/在线修复吗??直接在服务器上修改源码生效,无需重启应 ...

  2. 网络营销外包——网络营销外包专员浅析提升用户体验从哪入手?

    众所周知,在网站运营期间,网站跳出率的高低直接反映出用户对网站喜爱与否,也是检测网站性能是否丝滑的关键点,如果网站跳出率越高就证明用户体验越差,搜索引擎也不会更加注重抓取该网站.那么如果提高用户体验, ...

  3. android 6.0适应的机型,提升用户体验 可升Android 6.0机型盘点

    原标题:提升用户体验 可升Android 6.0机型盘点 [手机中国 导购]2009年Android系统正式发布,由此加速手机走向智能化进度.如今,随着Android系统日渐成熟,众多手机厂商都在此基 ...

  4. APP开发中这十个细节能直接影响到用户体验,那么如何提升用户体验?

    随着软件开发技术的不断发展和完善,有众多同类选择的APP用户越来越挑剔,单单拼功能拼硬件已经不足以捕获用户芳心.在APP使用过程中,大部分用户无意识地培养出了对使用体验的重视感.这警醒企业,只盯着为用 ...

  5. 客户体验是什么?如何提升用户体验从而提高产品成单率?必读!

    近年来,"客户体验"成了一个很常用的词,但实际上很多人都无法给到一明确定义,尽管许多企业都将改进客户体验视为一项差异化的竞争优势.可是,如果连某种东西的定义都说不清楚,又如何谈得上 ...

  6. 前端项目之--提升用户体验,提升前端性能

    提升用户体验 影响用户体验主要有两个方面,接口数据返回慢.渲染慢 性能监控 performance API 控制台输入window.performance查看 ✨针对数据返回慢的解决方案 数据过大 1 ...

  7. 描点链接元素的优化提升用户体验

    用一些大网站的时候,发现有一个很细节的共同点:点击链接元素的时候,链接元素会产生一个明显的边框,而且这个边框的颜色和#f27b04很接近,我觉得既然很多大网站都这么做,这其中肯定有一些用户体验方面的东 ...

  8. 纯前端表格控件SpreadJS V12.1 隆重登场,专注易用性,提升用户体验

    ​ 一款优秀的开发工具,在更新迭代中,除了要满足不同场景的业务需求,也需不断优化已有功能,尤其是细节方面,要能为用户带来使用体验和开发效率的提升. 作为一款备受业界专家和开发者认可的纯前端类Excel ...

  9. 使用渐进式JPEG来提升用户体验

    今天才认识到原来JPEG文件有两种保存方式他们分别是Baseline JPEG(标准型)和Progressive JPEG(渐进式).两种格式有相同尺寸以及图像数据,他们的扩展名也是相同的,唯一的区别 ...

  10. electron加载html加载不起来,Electron 预加载远程页面提升用户体验

    使用场景 Electron 内置 Chromium 和 Node.js,为了提升用户体验,通常 Electron 封装的前端静态文件存储在客户端本地.但总有一些特殊情况,会使用到部分远程页面. 比如微 ...

最新文章

  1. java map初始化方式_java中Map和List初始化的两种方法
  2. android 自定义背景园,Android 自定义ProgressBar 进度条颜色和背景颜色
  3. IA-32系统编程指南 - 第三章 保护模式的内存管理【2】
  4. kotlin中mainactivity无法直接调用xml中的控件_使用52North 客户端接口调用OGC WPS服务...
  5. 我心目中的牛程序员、我们可以对比看看(人家还是看多年朋友面子上才肯帮忙1周,至少需支付1万元辛苦费)...
  6. php strpos与strrpos,PHP开发之 strpos stripos strrpos strripos的区别
  7. Java IO 创建文件解决文件名重复问题
  8. ios更新了系统无服务器,苹果手机的iOS系统没法更新怎么办?
  9. Python -- 创建数字列表
  10. 百度LBS开放平台个性化地图 制作一款独一无二的地图
  11. FPGA之乒乓Buffer
  12. linux磁盘配额步骤,Linux磁盘配额设置及使用
  13. Python爬取王者荣耀所有英雄以及高清大图
  14. UNIX2DOS/DOS2UNIX for Windows
  15. 也来谈谈函数返回引用 int fun(int x);
  16. 计算机搜索没办法打汉字,电脑只能输入拼音不能输入汉字怎么办
  17. 计算机算法创新点,创新计算机体系结构设计的FMM算法分析.pdf
  18. 塔米狗|一文了解国有企业增资交易的要点与风险
  19. 计算机vf中rest是什么意思,vf常用命令(全)
  20. SpringBoot拦截器失效问题excludePathPatterns失效问题

热门文章

  1. Hexo next博客添加折叠块功能添加折叠代码块
  2. sqlserver无ldf日志文件附加的方法(数据库没有完全关闭,无法重新生成日志)...
  3. linux子系统的初始化_subsys_initcall()【转】
  4. 如何开拓中国EDM市场
  5. Linu下建立svn版本库
  6. 不知不觉,到51cto一年了!
  7. MySQL-快速入门(4)MySQL函数
  8. Web Service-第一篇什么是Web Service
  9. 函数-在函数里修改列表数据
  10. VS工具使用技巧总结