首页 > 代码库 > 实现窗口抖动

实现窗口抖动

在qq等聊天软件中都有发送窗口抖动功能,现在在qt下实现该功能。

用到的类主要有 QTimerQPoint

QTimer 类的作用是启用定时器,在不同时刻使窗口处于不同位置,从而得到的效果就是窗口的抖动。 QPoint 类的作用是定位窗口的位置(坐标)。

源代码如下:

//chardialog.h#ifndef CHATDIALOG_H#define CHATDIALOG_H#include <QDialog>namespace Ui {class ChatDialog;}class ChatDialog : public QDialog{    Q_OBJECT    public:    explicit ChatDialog(PersonLoginInfo *pb,QWidget *parent=0);    ~ChatDialog();private:    Ui::ChatDialog *ui;private:    QTimer* M_Timer;    int Counter;    QPoint curPos;    enum{MaxLimitTimes=500};//抖动次数    enum{MaxLimitSpace=20};//抖动幅度    enum{ShakeSpeed=1000}; //抖动速度private slots:    void S_TimeOut();    void slotShakeWindow();};#endif // CHATDIALOG_H

  

//chatdialog.cpp#include "chatdialog.h"#include "ui_chatdialog.h"ChatDialog::ChatDialog(PersonLoginInfo *pb,QWidget *parent) :    QDialog(parent),    ui(new Ui::ChatDialog){	ui->setupUi(this);    M_Timer=new QTimer(this);    connect(M_Timer,SIGNAL(timeout()),this,SLOT(S_TimeOut()));    connect(ui->ShakeWindow,SIGNAL(clicked()),this,SLOT(slotShakeWindow()));    Counter=MaxLimitTimes;}void ChatDialog::S_TimeOut(){    if(Counter<MaxLimitTimes)//没有抖动结束    {        ++Counter;        switch(Counter%4)        {        case 1:        {            QPoint TmpPos(curPos.x(),curPos.y()-MaxLimitSpace);            this->move(TmpPos);        }            break;        case 2:        {            QPoint TmpPos(curPos.x()-MaxLimitSpace,curPos.y()-MaxLimitSpace);            this->move(TmpPos);        }            break;        case 3:        {            QPoint TmpPos(curPos.x()-MaxLimitSpace,curPos.y());            this->move(TmpPos);        }            break;        case 0:        default:            this->move(curPos);            break;        }    }    else    {        M_Timer->stop();    }}void ChatDialog::slotShakeWindow(){    Counter=0;    curPos=this->pos();    M_Timer->start(ShakeSpeed);}

  《寄语:吾生也有涯,而知也无涯》

  2014-07-24  03:21:53