抖屏效果的实现说白了就是通过设置定时器,循环定时并不断变换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();
}
///
全文完(代码有点凌乱,大家凑活看,忙完这段时间了把代码整整)