Qt 鼠标样式特效探索样例(一)
 
    心血来潮,突然想在Qt里玩一把鼠标样式,想到在浏览网页时,经常看到漂亮的鼠标动画,于是今天摸索着乱写个粗糙的demo,来满足自己的好奇心。

效果图

方案要点

    1.不管用什么控件,显示动画需要的4张星星图,大小依次递减。
    2.记录鼠标移动坐标,分时、分段让星星控件响应move移动到对应轨迹。
    3.移动坐标数据量大,不必每一个值都使其成为星星控件的移动轨迹。
    4.星星控件起始坐标注意劈开鼠标焦点坐标,否则用户无法点击窗体控件,而只能疯狂的点到星星控件了。
 

实现代码

 
  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3. #include <QtGui/QWidget>
  4. #include <QTimer>
  5. #include <QList>
  6. #include <QPoint>
  7. class Widget : public QWidget
  8. {
  9. Q_OBJECT
  10. public:
  11. Widget(QWidget *parent = 0);
  12. ~Widget();
  13. private:
  14. QWidget *w1,*w2,*w3,*w4;
  15. QTimer *timer;
  16. QList<QPoint> pos_list_w2;
  17. QList<QPoint> pos_list_w3;
  18. QList<QPoint> pos_list_w4;
  19. int count;
  20. void setMyStyle(QWidget *wid, int w, int h);
  21. protected:
  22. void mouseMoveEvent(QMouseEvent *event);
  23. private slots:
  24. void updatePos();
  25. };
  26. #endif // WIDGET_H
 
  1. #include "widget.h"
  2. #include <QPalette>
  3. #include <QDebug>
  4. #include <QMouseEvent>
  5. Widget::Widget(QWidget *parent)
  6. : QWidget(parent)
  7. {
  8. QPalette phome = this->palette();
  9. phome.setBrush(this->backgroundRole(), QBrush(QPixmap(":/images/bg.jpg")));
  10. this->setPalette(phome);
  11. w1 = new QWidget(this);
  12. w2 = new QWidget(this);
  13. w3 = new QWidget(this);
  14. w4 = new QWidget(this);
  15. setMyStyle(w1,34,34);
  16. setMyStyle(w2,26,26);
  17. setMyStyle(w3,18,18);
  18. setMyStyle(w4,9,9);
  19. timer = new QTimer(this);
  20. connect(timer,SIGNAL(timeout()),this,SLOT(updatePos()));
  21. timer->start(100);
  22. this->setMouseTracking(true);
  23. count = 0;
  24. }
  25. Widget::~Widget()
  26. {
  27. }
  28. void Widget::setMyStyle(QWidget *wid, int w, int h)
  29. {
  30. wid->setWindowFlags(Qt::FramelessWindowHint);
  31. wid->resize(w,h);
  32. wid->setStyleSheet("border-image: url(:/images/cursor.png);");
  33. }
  34. void Widget::mouseMoveEvent(QMouseEvent *event)
  35. {
  36. w1->move(event->x(),event->y());
  37. if(!count)
  38. pos_list_w2 << event->pos();
  39. count > 7 ? (count = 0): count++;
  40. }
  41. void Widget::updatePos()
  42. {
  43. if(!pos_list_w4.isEmpty())
  44. {
  45. this->w4->move(pos_list_w4.takeFirst());
  46. }
  47. if(!pos_list_w3.isEmpty())
  48. {
  49. pos_list_w4 << pos_list_w3.first();
  50. this->w3->move(pos_list_w3.takeFirst());
  51. }
  52. if(!pos_list_w2.isEmpty())
  53. {
  54. pos_list_w3 << pos_list_w2.first();
  55. this->w2->move(pos_list_w2.takeFirst());
  56. }
  57. }

写在最后

      样例代码有些粗糙,欢迎改进,欢迎交流!
      期待各种建议、意见、和创意ideas!
 
http://blog.csdn.net/yiyaaixuexi/article/details/7209982

Qt 鼠标样式特效探索样例(一)——利用时间器调用QWidget.move()函数的更多相关文章

  1. 最简单的基于FFmpeg的移动端样例:IOS 推流器

    ===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...

  2. VC6 鼠标钩子 最简单样例

    Windows系统是建立在事件驱动的机制上的,说穿了就是整个系统都是通过消息的传递来实现的.而钩子是Windows系统中非常重要的系统接口,用它能够截获并处理送给其它应用程序的消息,来完毕普通应用程序 ...

  3. PyQt开发样例: 利用QToolBox开发的桌面工具箱Demo

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 一.引言 toolBox工具箱是一个容器部件,对应类为QToolBox,在其内有一列从上到下顺序排列 ...

  4. [转] Lodop、C-Lodop使用说明及样例

    本文转自:http://www.lodop.net/LodopDemo.html Lodop(标音:劳道谱,俗称:露肚皮)是专业WEB控件,用它既可裁剪输出页面内容,又可用程序代码直接实现 复杂打印. ...

  5. WEB打印控件Lodop(V6.x)使用说明及样例

    WEB打印控件Lodop(V6.x)使用说明及样例 Lodop是专业WEB控件,用它既可裁剪输出页面内容,又可用程序代码生成复杂打印页. 控件功能强大,却简单易用,所有调用如同JavaScript扩展 ...

  6. Java 8 时间日期库的20个使用演示样例

    除了lambda表达式,stream以及几个小的改进之外,Java 8还引入了一套全新的时间日期API,在本篇教程中我们将通过几个简单的任务演示样例来学习怎样使用Java 8的这套API.Java对日 ...

  7. 最简单的视音频播放演示样例4:Direct3D播放RGB(通过Texture)

    ===================================================== 最简单的视音频播放演示样例系列文章列表: 最简单的视音频播放演示样例1:总述 最简单的视音频 ...

  8. 最简单的基于FFmpeg的移动端样例:Android 视频解码器-单个库版

    ===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...

  9. 【spring教程之中的一个】创建一个最简单的spring样例

    1.首先spring的主要思想,就是依赖注入.简单来说.就是不须要手动new对象,而这些对象由spring容器统一进行管理. 2.样例结构 如上图所看到的,採用的是mavenproject. 2.po ...

随机推荐

  1. information_schema.engines学习

    当前mysql实例的存储引擎信息可以从information_schema.engines 中查询到 例子: mysql> select * from information_schema.en ...

  2. [statsvn]-svn代码量统计

    用statasvn进行代码量统计的时候,第一步需要获取到项目的日志,但是我本机的svn1.4没有安装命令行,重新运行1.4的安装包也没有命令行的选项... 那就升级到最新的svn1.8好了,下载最新的 ...

  3. 利用SQL Profiler处理开销较大的查询

    当SQL Server的性能变差时,最可能发生的是以下两件事: 首先,某些查询产生了系统资源上很大的压力.这些查询影响整个系统的性能,因为服务器无法足够快速地服务其他SQL查询. 另外,开销较大的查询 ...

  4. java设计模式--创建模式--工厂方法

    工厂方法定义: 工厂方法 概述 定义一个用于创建对象的接口,让子类决定实例化哪一个类.FactoryMethod使一个类的实例化延迟到其子类. 适用性 .当一个类不知道它所必须创建的对象的类的时候. ...

  5. App 推荐:Spotify

    之前一直用网易云音乐听歌,后来因为沸沸扬扬的 XCode 注入病毒事件,就把它卸了(无奈脸=.=) 对比国内其它音乐App,私心觉得网易云音乐还是不错的.没有很多花里胡哨的装饰,里面的歌单做的也还算精 ...

  6. 今日成长笔记2016-11-18 - 关于java开发

    好久没有写今日成长笔记了,要记得上一次写笔记还是2016-09-05,今天心血来潮,写一写最近发生在自己身上的事情,以后我要坚持每天写日记.我承认自己身上的确或多或少的存在不足,现在把它们抛出来,并记 ...

  7. 用c++语言编写函数 int index(char *s,char * t),返回字符串t在字符串s中出现的最左边的位置,如果s中没有与t匹配的子串,则返回-1。类似于索引的功能。

    首先,分析一下程序的思路: 1:从s的第i个元素开始,与t中的第1个元素匹配,如果相等,则将s的第i+1元素与t中的第2个元素匹配,以此类推,如果t所有元素都匹配,则返回位置i;否则,执行2; 2: ...

  8. quick-cocos2d-x android返回键监听并实现原生退出对话框

    这两天最终闲了一下,就顺手又把quick捡起来又学了学,一直都认为quick比cocos2dx那套lua绑定要方便很多,今天试了下android返回键的监听,还是挺好弄的,所以就有了这篇. 首先说明一 ...

  9. Android 四大组件之 BroadcastReceiver

    0  简介        BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的 广播.        在Android系统中,广播体现在方方面面,例 ...

  10. mysql跟踪提交的SQL语句

    http://www.cnblogs.com/wuyifu/p/3328024.html