2014-10-19 10 views
0

장면에서 항목을 이동하려고 시도 했으므로 QKeypressEventmoveBy 모두 완벽하게 작동하지만 "키 프레스 이벤트"를 복구하고 싶습니다. 그래서 먼저 결정했습니다 , 키를 누를 때 true를 반환하는 부울을 사용하고 부울이 아닌 경우 false를 반환하고 부울이 true 인 경우 moveBy을 호출하는 새 함수를 만들지 만 불행히도 작동하지 않습니다. 내 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

+0

@Ary 내 답변을 수락 해 주셔서 감사합니다. 귀하의 의견을 주셔서 감사하지만 스택 오버플로에 "감사합니다"라고하는 가장 좋은 방법은 투표이며 여기에 작성된대로 동의합니다 http://stackoverflow.com/help/someone-answers. 이 일을하기에 충분한 평판이 있으니 내 대답에 투표 해 주시겠습니까? 대답 근처의 위 삼각형을 한 번 클릭하는 것입니다. 고마워. – Chernobyl

+0

죄송합니다. 동의했지만 이전에 투표를 할 수 없었습니다! 완료;) – Ary