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();
}
///
全文完(代码有点凌乱,大家凑活看,忙完这段时间了把代码整整)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值