C++ 在场景中移动项目
我尝试在场景中移动一个项目,为此,我使用C++ 在场景中移动项目,c++,qt,qgraphicsitem,qkeyevent,C++,Qt,Qgraphicsitem,Qkeyevent,我尝试在场景中移动一个项目,为此,我使用QKeypressEvent和moveBy这两种方法都能很好地工作,但我想恢复“按键事件”,所以我决定首先使用一个布尔值,按下按键时返回true,不按下按键时返回false,然后创建一个新函数,如果布尔值为true,则调用moveBy,但不幸的是,它不起作用。 这就是我在file.cpp中所做的 Perso::Perso() { right= false; left= false; up= false;
QKeypressEvent
和moveBy
这两种方法都能很好地工作,但我想恢复“按键事件”,所以我决定首先使用一个布尔值,按下按键时返回true,不按下按键时返回false,然后创建一个新函数,如果布尔值为true,则调用moveBy
,但不幸的是,它不起作用。
这就是我在file.cpp中所做的
Perso::Perso()
{
right= false;
left= false;
up= false;
down= false;
moveOnMap();
setFlag(QGraphicsItem::ItemIsFocusable);
}
void Perso::moveOnMap(){
if (left) {
moveBy(-10,0);
}
if (right) {
moveBy(10,0);
}
if (up) {
moveBy(0, -10);
}
if (down) {
moveBy(0, +10);
}
}
void Perso::keyPressEvent(QKeyEvent *event){
switch(event->key()){
case Qt::Key_Up:
up=true;
//moveBy(0, -10);
break;
case Qt::Key_Right:
right=true;
// moveBy(10,0);
break;
case Qt::Key_Left:
left=true;
//moveBy(-10,0);
break;
case Qt::Key_Down:
down= true;
//moveBy(0, 10);
break;
}
update();
}
void Perso::keyReleaseEvent(QKeyEvent *event){
switch(event->key()){
case Qt::Key_Up:
up=false;
break;
case Qt::Key_Right:
right= false;
break;
case Qt::Key_Left:
left= false;
break;
case Qt::Key_Down:
down= false;
break;
}
}
任何人都可以帮助我理解我错在哪里?我看不出你在这里调用你的
moveOnMap()代码>如果在原始代码中未调用此方法,则说明此方法不起作用是正常的。您只能在构造函数中调用它,但应该在每次按键时调用此方法。因此,请尝试在关键事件中调用此方法:
void Perso::keyPressEvent(QKeyEvent *event){
switch(event->key()){
case Qt::Key_Up:
up=true;
//moveBy(0, -10);
break;
case Qt::Key_Right:
right=true;
// moveBy(10,0);
break;
case Qt::Key_Left:
left=true;
//moveBy(-10,0);
break;
case Qt::Key_Down:
down= true;
//moveBy(0, 10);
break;
}
moveOnMap();
update();
}
void Perso::keyReleaseEvent(QKeyEvent *event){
switch(event->key()){
case Qt::Key_Up:
up=false;
break;
case Qt::Key_Right:
right= false;
break;
case Qt::Key_Left:
left= false;
break;
case Qt::Key_Down:
down= false;
break;
}
moveOnMap();
}
@谢谢你接受我的回答。我很感激你的评论,但是对堆栈溢出说“谢谢”的最好方式是投票并接受这里写的内容。你有足够的声誉来做这件事,所以你能投票支持我的答案吗?只需点击答案附近的上三角。也谢谢你。很抱歉被接受了,但我以前不能投赞成票!完成;)