您的位置:首页 > 编程语言 > Qt开发

QT实现类似QQ的抖屏效果

2015-06-23 19:44 387 查看
抖屏效果的实现说白了就是通过设置定时器,循环定时并不断变换mainWindow的位置来实现的。废话不多说直接上代码。

mainwindow.h文件:

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


mainwindow.cpp文件:

[code]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();

}

///////////////////////////////////////////////

全文完(代码有点凌乱,大家凑活看,忙完这段时间了把代码整整)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: