生活随笔
收集整理的這篇文章主要介紹了
QT键盘响应卡顿的解决方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.不要將事件在鍵盤響應事件中執行,應在鍵盤響應事件出設置布爾型變量。
例如:
void Widget:: keyPressEvent(QKeyEvent
*key
){Q_UNUSED(key
);if(start
>0){return;}if(!pree_PAUSE
) {if(key
->key()==Key_UP
){pree_UP
=true;}else if(key
->key()==Key_LEFT
){pree_LEFT
=true;}else if(key
->key()==Key_RIGHT
){pree_RIGHT
=true;}else if(key
->key()==Key_DOWN
){pree_DOWN
=true;}else if(key
->key()==Key_SHOOT
){pree_SHOOT
=true;}else if(key
->key()==Key_PAUSE
){pree_PAUSE
=true;}}if(key
->key()==Key_SHOOT
&&pree_PAUSE
){pree_START
=true;}if(key
->key()==Qt
::Key_M
){emit
retu_wel_Wi();}}
2.通過計時器來定時調用一個執行事件的函數,在該函數中是以這些變量的值來執行的,真就執行,執行完之后要記得把變量再賦值為 false。
例如:
**計時器綁定事件:
**```cpp
connect(time2
[0],&QTimer
::timeout
,this,&Widget
::setpress
);
void Widget::setpress()//施行鍵盤響應事件
{
if (pree_UP)
{role1.setdire(UP);pree_UP=false;
}
else if (pree_LEFT)
{role1.setdire(LEFT);pree_LEFT=false;
}else if (pree_RIGHT)
{role1.setdire(RIGHT);pree_RIGHT=false;
}else if (pree_DOWN)
{role1.setdire(DOWN);pree_DOWN=false;
}
else if(pree_SHOOT)
{pree_SHOOT=false;if(!role1.bulle_t.getactive()) //如果已經有子彈在外邊則不發射{ role1.shot();QSound::play(":/music/Audio/wav/Shoot.wav");}}
else if(pree_START)
{timer1[0]->start(31); //表示每31毫秒都會調用與其關聯的函數。timer1[1]->start(160);timer1[2]->start(1000);timer1[3]->start(60);pree_START=false;pree_PAUSE=false;
}
else if(pree_PAUSE)
{timer1[0]->stop(); //表示每31毫秒都會調用與其關聯的函數。timer1[1]->stop();timer1[2]->stop();timer1[3]->stop();}
}
總結
以上是生活随笔為你收集整理的QT键盘响应卡顿的解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。