QTはQQのようなジッタ効果を実現する
2160 ワード
ジッタ効果の実現は、タイマーを設定し、タイミングをループさせ、mainWindowの位置を絶えず変換することで実現されます.くだらないことを言わないで直接コードをつけなさい.mainwindow.hファイル:
mainwindow.cppファイル:
} /////////////////////////////////////////////////////////////////////////////////////////// main.cpp:
int main(int argc,char*argv[]){QTimer_pShakeWindowTimer= new QTimer(this);QQQQQushButton_shakeBtn=new QQQQQQushButton(this);connect(&_pShakeWindowTimer,SIGNAL(timeout()),this,SLOT(onShakeWindowTimeOut()))));connect(_shakeBtn,SIGNAL(clicked(),this,SLOT,SLOT());(onClickShakeBtn();_pShakeWindowTimer.setInterval(40);//タイマーを40ミリ秒に設定}
void onClickShakeBtn() { _pShakeWindowTimer.start(); App::wnd()->setShakeNumber(); } /////////////////////////////////////////////// 全文が終わった(コードが少し乱れているので、みんなが集まって見て、忙しくてこの間コードを丸ごと)
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);QQQQQushButton_shakeBtn=new QQQQQQushButton(this);connect(&_pShakeWindowTimer,SIGNAL(timeout()),this,SLOT(onShakeWindowTimeOut()))));connect(_shakeBtn,SIGNAL(clicked(),this,SLOT,SLOT());(onClickShakeBtn();_pShakeWindowTimer.setInterval(40);//タイマーを40ミリ秒に設定}
void onClickShakeBtn() { _pShakeWindowTimer.start(); App::wnd()->setShakeNumber(); } /////////////////////////////////////////////// 全文が終わった(コードが少し乱れているので、みんなが集まって見て、忙しくてこの間コードを丸ごと)