QT实现类似QQ的抖屏效果

来源:互联网 发布:2017mac国服英雄联盟 编辑:程序博客网 时间:2024/06/05 18:27

抖屏效果的实现说白了就是通过设置定时器,循环定时并不断变换mainWindow的位置来实现的。废话不多说直接上代码。
mainwindow.h文件:

void shakeWindow();//抖窗口void setShakeNumber();//把m_nTimes置零int m_nTimes=0;QPoint m_curPos;QTimer* m_timer;

mainwindow.cpp文件:

Window::Window(QWidget *parent),m_timer(new QTimer(this)),m_nTimes(0),m_curPos(QPoint()){}void Window::setShakeNumber(){    m_nTimes = 0;}void Window::shakeWindow(){    m_curPos = this->pos();    m_timer->stop();    if (m_nTimes <= MaxLimitTimes)    {        ++m_nTimes;        switch (m_nTimes % 4)        {            case 1:            {              QPoint tmpPos(m_curPos.x() + MaxLimitSpace, m_curPos.y() - MaxLimitSpace);              this->move(tmpPos);            }            break;            case 2:            {              QPoint tmpPos(m_curPos.x() - MaxLimitSpace, m_curPos.y() - MaxLimitSpace);              this->move(tmpPos);            }            break;            case 3:            {              QPoint tmpPos(m_curPos.x() - MaxLimitSpace, m_curPos.y() + MaxLimitSpace);              this->move(tmpPos);            }        break;            case 0:            {              QPoint tmpPos(m_curPos.x() + MaxLimitSpace, m_curPos.y() + MaxLimitSpace);              this->move(tmpPos);            }            break;            default:            this->move(m_curPos);            break;        }        m_timer->start();    }

}
///////////////////////////////////////////////////////////////////////////////////////////
main.cpp:

int main(int argc, char *argv[])
{
QTimer _pShakeWindowTimer=new QTimer(this);
QPushButton _shakeBtn=new QPushButton(this);
connect(&_pShakeWindowTimer, SIGNAL(timeout()), this,SLOT(onShakeWindowTimeOut()));
connect(_shakeBtn,SIGNAL(clicked()),this,SLOT(onClickShakeBtn()));
_pShakeWindowTimer.setInterval(40);//设置定时器为40毫秒
}

void onClickShakeBtn()
{
_pShakeWindowTimer.start();
App::wnd()->setShakeNumber();
}
///////////////////////////////////////////////
全文完(代码有点凌乱,大家凑活看,忙完这段时间了把代码整整)

0 0
原创粉丝点击