QT实现类似QQ的抖屏效果

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

你可能感兴趣的:(QT使用经验分享)