Переместить элемент в сцене Qt

Я пытаюсь переместить элемент в сцене, и для этого я использую QKeypressEvent а также moveBy это работает отлично, но я бы хотел восстановить «событие нажатия клавиши», поэтому я решил сначала использовать логическое значение, которое возвращает истину, когда клавиша нажата, и ложь, если это не так, а затем создать новую функцию, где я позвонить moveBy если мой логический true, но, к сожалению, не работает.
Это то, что я сделал в моем файле .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;
}

}

Кто-нибудь может помочь мне понять, где я не прав?

0

Решение

Я не вижу здесь, чтобы вы назвали свой 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();

}
2

Другие решения


По вопросам рекламы [email protected]