首页 > 代码库 > 实现窗口抖动
实现窗口抖动
在qq等聊天软件中都有发送窗口抖动功能,现在在qt下实现该功能。
用到的类主要有 QTimer 和 QPoint
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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。