2014-10-19 123 views
0

我嘗試移動一個場景中的項目,爲此,我使用了QKeypressEventmoveBy,這兩項工作都很完美,但我想恢復「按鍵事件」,所以我決定先,使用一個布爾值,當鍵被按下時返回true,否則返回false,然後創建一個新的函數,我稱moveBy如果我的布爾值爲true,但不幸的是不起作用。 這是我在file.cpp所做在一個場景中移動一個項目Qt

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; 
    } 

} 

任何人都可以幫助我理解我在哪裏錯了?

回答

2

我在這裏看不到你打電話給你的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(); 

} 
+0

是的,它的作品!非常感謝! – Ary 2014-10-19 17:54:58

+0

@Ary謝謝你接受我的回答。我很欣賞你的評論,但在Stack Overflow上說「謝謝」的最好方法是投票並接受寫在這裏http://stackoverflow.com/help/someone-answers。你有足夠的聲譽來做到這一點,所以你可以投我的答案嗎?這只是在靠近答案的上方三角形上點擊一下。也謝謝你。 – Chernobyl 2014-10-20 12:26:24

+0

對不起,它被接受,但我不能投票之前!完成;) – Ary 2014-10-20 14:10:34

相關問題