实现窗口抖动

在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

实现窗口抖动,布布扣,bubuko.com

时间: 2024-10-13 11:49:20

实现窗口抖动的相关文章

好玩的WPF第一弹:窗口抖动+边框阴影效果+倒计时显示文字

大家一进到博客就应该看到这张GIF了吧--好吧,今天不是星期一-- 那么就来一起做做这个效果啦!看完记得点赞哦~ 新建一个WPF项目 如果新建WPF项目应该不用我说了吧,在C#下面找找就好了. MainWindow.xaml 在初始的Window下添加如下属性: x:Name="mainWindow" WindowStartupLocation="CenterScreen" WindowState="Normal" WindowStyle=&qu

javascript实现的窗口抖动代码实例

javascript实现的窗口抖动代码实例:窗口抖动效果在很多地方都有应用,例如网易的登陆窗口就有这样的效果,当登陆失败的时候就会出现抖动效果,这不但有动感,而且让人感觉新颖,下面是一段这样的代码实例,和大家分享一下.代码如下: <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"/> <meta name="author" content="http:

窗口抖动的实现

import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.Button; import android.widget.EditText; public class AnimAct

Android实战简易教程-第六十七枪(android动画实现窗口抖动效果)

在制作引用是我们可以引入android动画,让用户感觉到交互性更强,下面我们通过一个实例讲解一下如何使用android动画实现窗口的抖动效果. 1.引入动画文件: <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@ani

图片加载防止窗口抖动,又可以等比例缩放

由于html加载最后才会加载图片,所以如果没有提前设置高度的话,就会出现窗口抖动,用户体验很不好. 如果固定死高度的话,又不能于宽等比例缩放. 解决办法: 已知原图的宽高比例 例如:此图宽500,高321,高/宽为64.2% 方法一: 不考虑兼容性(即手机端开发): 直接设置height: 64.2vw;,意思是高度设置为视窗宽度的64.2% <style> .img-content{ width: 100%; height: 64.2vw; overflow: hidden; } img{

小米网登录窗口抖动函数实现

之前经常在小米网上买东西,发现小米网站的登录验证做得挺有特色的.当用户名或密码输入错误的时候会像“摇头”似得抖一抖,略微想了一下,发现实现的方式挺简单的,所以今天下午花了一点时间想了一下,以下是我的思路和代码. 要实现抖动,需要实现一下几步: 1,获取当前元素的位置作为初始位置. 2,设置定时器循环改变元素的位置,每次左右移动一次比上一次移动少一点点距离,直到停止到初始位置. 3,触发调用 小米网使用一个 div 元素放置表单元素, div 元素水平居中,并设置定位方式为 relative ,以

手机屏幕窗口抖动的实现

昨天在qq群上有人问到类似QQ的聊天窗口抖动效果是怎么实现的,在这里我就简单的实现了一下,贴上代码: <span style="font-family:Courier New;"> final View decorView = ((ViewGroup) findViewById(android.R.id.content)).getChildAt(0); Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERV

Android 实现 窗口抖动效果

当我们输入内容有误,进入下一步的时候 ,不应生效 ,页面上什么提示也没有也不太友好,这时候可以让 输入框抖动一下 下面就把 抖动的动画 发上来,大家可以使用一下哦 cycle.xml 文件 ,主要就是用来指定 动画执行几次的 <?xml version="1.0" encoding="utf-8"?> <cycleInterpolator xmlns:android="http://schemas.android.com/apk/res/

jquery的小插件(按钮抖动)——衍生QQ窗口抖动

1.抖动的按钮 效果预览:http://runjs.cn/detail/tyx8dbag <script type="text/javascript"> //shakenum:抖动的次数,shakeDistance:抖动的距离 jQuery.fn.Shake = function (shakenum , shakeDistance) { this.each(function () { var jSelf = $(this); jSelf.css({ position: 'r