Cómo bloquear la tecla de retroceso en android cuando se utiliza Qt

Tengo que impedir que la aplicación im hacer salir si alguien empuja la tecla de nuevo en un dispositivo Android para que pueda enviar un mensaje para preguntar si el usuario quiere dejar la aplicación o no, me encontré con:

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

Podría manejar ese evento, lo probé en mi proyecto necesitas y no funcionó. ¿Puede qtkeyevent manejar esto? O hay otra manera de hacerlo?

Lo bloqueo 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 necesito capturar el evento en Qt para que yo envíe un mensaje

Aquí está cómo solucionarlo:

 @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

Puede escribir onKeyListener para la Actividad, comprobar los códigos de teclado y si son lo que desea, consumirlos . Al menos, en Java. Ciertamente, C ++ no tiene menos posibilidades.

No está muy seguro de si esto se aplica a su situación, pero en Android en general, en cada Activity de interés que utilizaría lo siguiente para anular la pulsación de botón de nuevo:

 @Override public void onBackPressed() { // Make sure to NOT call super! ... } 
  • Qt / QML Android mejor práctica para enviar un intento personalizado (compartir URL)
  • ¿Cómo evito que un dispositivo Android se vaya a dormir desde la aplicación Qt
  • Qt5.1-android: Qt versión para mips que faltan en QtCreator
  • Biblioteca Qt C ++ en Android Proyecto Eclipse: controlador QSQLITE no cargado
  • Trabajar alrededor de QString móvil error
  • Cómo quitar el modo de depuración en la salida de liberación en android con QT 5.2
  • Qt - el paquete android.support.v4.app no ​​existe
  • Dimensiones del teclado virtual QML
  • Cómo lento o rápido es Qt móvil para Android
  • Cómo obtener NFC trabajando en Android con Qt 5.6
  • Qt Android bluetooth socket escribir problemas en Android 5.1.1 y 6.0
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.