Qt实现360桌面精灵

时间:2020-12-01 20:39:30

有两个QLabel, 一个显示静态图片, 一个显示动态图片, 相互切换显示 ..

Qt实现360桌面精灵Qt实现360桌面精灵

[cpp]  view plain  copy   Qt实现360桌面精灵 Qt实现360桌面精灵
  1. #ifndef TESTCHICKEN_H  
  2. #define TESTCHICKEN_H  
  3.   
  4. #include <QtWidgets/QDialog>  
  5. #include "ui_testChicken.h"  
  6. #include <QPoint>  
  7.   
  8. class QMovie;  
  9. class testChicken : public QDialog  
  10. {  
  11.     Q_OBJECT  
  12.   
  13. public:  
  14.     testChicken(QWidget *parent = 0);  
  15.     ~testChicken();  
  16.   
  17. private slots:  
  18.     void OnTimerOut();  
  19.   
  20. private:  
  21.     virtual void mousePressEvent( QMouseEvent* e);  
  22.     virtual void mouseMoveEvent( QMouseEvent* e);  
  23.     virtual void mouseReleaseEvent( QMouseEvent * e);  
  24.     bool CheckDragRegion(const QPoint &g_pos);  
  25.   
  26.   
  27. private:  
  28.     Ui::testChickenClass ui;  
  29.     QMovie *movie;  
  30.   
  31.     bool mbDragEnabled;  
  32.     QPoint mRelativePos;  
  33. };  
  34.   
  35. #endif // TESTCHICKEN_H  
[cpp]  view plain  copy   Qt实现360桌面精灵 Qt实现360桌面精灵
  1. #include "testChicken.h"  
  2. #include <QMovie>  
  3. #include <QTimer>  
  4. #include <QMouseEvent>  
  5.   
  6. testChicken::testChicken(QWidget *parent)  
  7.     : QDialog(parent)  
  8. {  
  9.     ui.setupUi(this);  
  10.   
  11.     mbDragEnabled = false;  
  12.     mRelativePos = QPoint(0,0);  
  13.   
  14.     setWindowFlags(windowFlags() | Qt::FramelessWindowHint);  
  15.     setAttribute(Qt::WA_TranslucentBackground);  
  16.   
  17.     QPixmap pixmap("AnZai.png");  
  18.     ui.labImage->setPixmap(pixmap);  
  19.   
  20.     movie = new QMovie("AnZai.gif");  
  21.     ui.labAnimation->setMovie(movie);  
  22.     ui.labAnimation->hide();  
  23.   
  24.     QTimer* timer = new QTimer;  
  25.     timer->setInterval(3000);  
  26.     timer->start();  
  27.   
  28.     connect(timer, SIGNAL(timeout()), this, SLOT(OnTimerOut()));  
  29. }  
  30.   
  31. testChicken::~testChicken()  
  32. {  
  33.   
  34. }  
  35.   
  36. void testChicken::OnTimerOut()  
  37. {  
  38.     if(movie->state() == QMovie::Running) {  
  39.         movie->stop();  
  40.         ui.labAnimation->hide();  
  41.         ui.labImage->show();  
  42.     }  
  43.     else {  
  44.         movie->start();  
  45.         ui.labAnimation->show();  
  46.         ui.labImage->hide();  
  47.     }  
  48. }  
  49.   
  50. void testChicken::mousePressEvent( QMouseEvent* e )  
  51. {  
  52.     if(CheckDragRegion(e->globalPos())) {  
  53.         mbDragEnabled = true;  
  54.         mRelativePos= pos() - e->globalPos();  
  55.     }  
  56. }  
  57.   
  58. void testChicken::mouseMoveEvent( QMouseEvent* e )  
  59. {  
  60.     if(mbDragEnabled) {  
  61.         move(e->globalPos()+ mRelativePos);  
  62.     }  
  63. }  
  64.   
  65. void testChicken::mouseReleaseEvent( QMouseEvent * e )  
  66. {  
  67.     if(mbDragEnabled) {  
  68.         mbDragEnabled = false;  
  69.     }  
  70. }  
  71.   
  72. bool testChicken::CheckDragRegion( const QPoint &g_pos )  
  73. {  
  74.     QPoint pt = g_pos;   
  75.     QRect rcWnd = geometry();   
  76.     //qDebug() << "pos: " << pt << "geometry: " << rcWnd;   
  77.     pt.setX(pt.x() - rcWnd.left());   
  78.     pt.setY(pt.y() - rcWnd.top());   
  79.   
  80.     int nW = rcWnd.width();  
  81.     int nH = rcWnd.height();   
  82.   
  83.     QRect rcDrag(0, 0, nW, nH);  
  84.     if(rcDrag.contains(pt)) {         
  85.         return true;  
  86.     }  
  87.   
  88.     return false;   
  89. }  
Qt实现360桌面精灵

原文链接:http://blog.csdn.net/robertkun/article/details/27096677