实现窗口抖动

在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

你可能感兴趣的:(实现)