• 实现窗口抖动


    在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

    当你坚持做一件完全正确的事情,有可能在很长一段时间内,你的价值都是零。
  • 相关阅读:
    webdriver 窗口切换
    element not visible 错误的原因和解决方式
    选择子数据,默认存储父数据 的校验方法
    What's jenkins And How to Install
    testng suite
    webdriver 选择下拉列表的操作
    webdriver 获取表格内的文案
    webdriver 定位表格元素
    webdriver 上传文件
    树上倍增求解LCA 模板
  • 原文地址:https://www.cnblogs.com/lweleven/p/3864482.html
Copyright © 2020-2023  润新知