Я пытаюсь переместить элемент в сцене, и для этого я использую 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;
}
}
Кто-нибудь может помочь мне понять, где я не прав?
Я не вижу здесь, чтобы вы назвали свой 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();
}