2012-02-09 10 views
6

Necesito evitar que la aplicación que estoy haciendo salga si alguien presiona la tecla de retroceso en un dispositivo Android para poder enviar un mensaje y preguntar si el usuario quiere abandonar la aplicación o no, he encontrado que el uso de:Cómo bloquear la tecla de retroceso en Android al usar Qt

@Override 
void MainWindow::onBackPressed() 
{ 
    ... 
} 

que podía manejar ese evento, lo probé en mi proyecto necessitas y no funcionó. ¿Puede qtkeyevent manejar esto? o hay otra forma de hacerlo?

que bloquearlo usando esto:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) 
{ 
    if ((keyCode == KeyEvent.KEYCODE_BACK)) 
    { 
    //moveTaskToBack(true); 
    return true; 
    } 
if (QtApplication.m_delegateObject != null && 
     QtApplication.onKeyDown != null) 
    return (Boolean) 
QtApplication.invokeDelegateMethod(QtApplication.onKeyDown, keyCode, event); 
    else 
    return super.onKeyDown(keyCode, event); 
} 

ahora tengo que capturar el evento en Qt así que un envío un mensaje

Respuesta

4

Aquí es cómo resolverlo:

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    { 
     int newKeyCode = keyCode; 
     if ((keyCode == KeyEvent.KEYCODE_BACK)) 
     { 
      newKeyCode = KeyEvent.KEYCODE_MEDIA_PREVIOUS; 
     } 
     if (QtApplication.m_delegateObject != null && 
QtApplication.onKeyDown != null) 
      return (Boolean) 
QtApplication.invokeDelegateMethod(QtApplication.onKeyDown, newKeyCode, 
event); 
     else 
      return super.onKeyDown(newKeyCode, event); 
    } 
    public boolean super_onKeyDown(int keyCode, KeyEvent event) 
    { 
     return super.onKeyDown(keyCode, event); 
    } 

//--------------------------------------------------------------------------- 

    @Override 
    public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent 
event) 
    { 
     int newKeyCode = keyCode; 
     if ((keyCode == KeyEvent.KEYCODE_BACK)) 
     { 
      newKeyCode = KeyEvent.KEYCODE_MEDIA_PREVIOUS; 
     } 
     if (QtApplication.m_delegateObject != null && 
QtApplication.onKeyMultiple != null) 
      return (Boolean) 
QtApplication.invokeDelegateMethod(QtApplication.onKeyMultiple ,newKeyCode, 
repeatCount, event); 
     else 
      return super.onKeyMultiple(newKeyCode, repeatCount, event); 
    } 
    public boolean super_onKeyMultiple(int keyCode, int repeatCount, 
KeyEvent event) 
    { 
     return super.onKeyMultiple(keyCode, repeatCount, event); 
    } 

//--------------------------------------------------------------------------- 

    @Override 
    public boolean onKeyUp(int keyCode, KeyEvent event) 
    { 
     int newKeyCode = keyCode; 
     if ((keyCode == KeyEvent.KEYCODE_BACK)) 
     { 
      newKeyCode = KeyEvent.KEYCODE_MEDIA_PREVIOUS; 
     } 
     if (QtApplication.m_delegateObject != null && 
QtApplication.onKeyDown != null) 
      return (Boolean) 
QtApplication.invokeDelegateMethod(QtApplication.onKeyUp, newKeyCode, 
event); 
     else 
      return super.onKeyUp(newKeyCode, event); 
    } 
    public boolean super_onKeyUp(int keyCode, KeyEvent event) 
    { 
     return super.onKeyUp(keyCode, event); 
    } 

y luego en Qt:

void MainWindow::keyPressEvent(QKeyEvent *k) 
{ 
    if(k->key() == Qt::Key_MediaPrevious) 
    { 
     int ret = messageBox(QMessageBox::Yes | QMessageBox::No, "¿Desea salir de la aplicación?", QMessageBox::Question); 

     switch(ret) 
     { 
     case QMessageBox::Yes: 
      this->close(); 
      break; 

     case QMessageBox::No: 
      break; 
     } 
    } 
} 
Gracias a

Koying que publica esta solución aquí http://groups.google.com/group/android-qt/browse_thread/thread/676c24e94bb9a200?pli=1

0

Usted puede escribir onKeyListener para la actividad, la verificación de códigos de tecla y si es lo que quieres, consume ellos. Al menos, en Java. Sin duda, C++ no tiene menos posibilidades.

0

No estoy seguro de si esto se aplica a su situación, pero en Android en general, en cada Activity de interés que usaría el siguiente para anular el botón de retroceso de prensa:

@Override 
public void onBackPressed() 
{ 
    // Make sure to NOT call super! 
    ... 
} 
Cuestiones relacionadas