0

シーン内のアイテムを移動しようとするQKeypressEventmoveBy、両方とも完全に機能しますが、「キー押下イベント」を回復したいので、最初に、キーが押されたときに 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;
    }

}

誰が私が間違っているかを理解するのを手伝ってくれますか?

4

1 に答える 1

2

moveOnMap();ここでは、元のコードで Ifを呼び出していることを確認できません。このメソッドを呼び出さないと、機能しないのが普通です。コンストラクターでのみ呼び出しますが、キーを押すたびにこのメソッドを呼び出す必要があります。したがって、キー イベントでこのメソッドを呼び出してみてください。

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();

}
于 2014-10-19T17:41:42.327 に答える