如何在使用Qt时阻止android中的后退键

Vor*_*dok 6 c++ qt android

如果有人在Android设备上按下后退键,我需要阻止应用程序退出,这样我就可以发送消息框询问用户是否要离开应用程序,我发现使用:

@Override
void MainWindow::onBackPressed()
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

我可以处理那个事件,我在我的必需品项目上尝试过它并没有用.qtkeyevent可以处理这个吗?还是有其他办法吗?

我使用这个阻止它:

@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);
}
Run Code Online (Sandbox Code Playgroud)

现在我需要在Qt上捕获事件,以便我发送消息

Vor*_*dok 4

以下是解决方法:

\n\n
@Override\n    public boolean onKeyDown(int keyCode, KeyEvent event)\n    {\n        int newKeyCode = keyCode;\n        if ( (keyCode == KeyEvent.KEYCODE_BACK) )\n        {\n           newKeyCode = KeyEvent.KEYCODE_MEDIA_PREVIOUS;\n        }\n        if (QtApplication.m_delegateObject != null &&\nQtApplication.onKeyDown != null)\n            return (Boolean)\nQtApplication.invokeDelegateMethod(QtApplication.onKeyDown, newKeyCode,\nevent);\n        else\n            return super.onKeyDown(newKeyCode, event);\n    }\n    public boolean super_onKeyDown(int keyCode, KeyEvent event)\n    {\n        return super.onKeyDown(keyCode, event);\n    }\n\n//---------------------------------------------------------------------------\n\n    @Override\n    public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent\nevent)\n    {\n        int newKeyCode = keyCode;\n        if ( (keyCode == KeyEvent.KEYCODE_BACK) )\n        {\n            newKeyCode = KeyEvent.KEYCODE_MEDIA_PREVIOUS;\n        }\n        if (QtApplication.m_delegateObject != null &&\nQtApplication.onKeyMultiple != null)\n            return (Boolean)\nQtApplication.invokeDelegateMethod(QtApplication.onKeyMultiple ,newKeyCode,\nrepeatCount, event);\n        else\n            return super.onKeyMultiple(newKeyCode, repeatCount, event);\n    }\n    public boolean super_onKeyMultiple(int keyCode, int repeatCount,\nKeyEvent event)\n    {\n        return super.onKeyMultiple(keyCode, repeatCount, event);\n    }\n\n//---------------------------------------------------------------------------\n\n    @Override\n    public boolean onKeyUp(int keyCode, KeyEvent event)\n    {\n        int newKeyCode = keyCode;\n        if ( (keyCode == KeyEvent.KEYCODE_BACK) )\n        {\n            newKeyCode = KeyEvent.KEYCODE_MEDIA_PREVIOUS;\n        }\n        if (QtApplication.m_delegateObject != null  &&\nQtApplication.onKeyDown != null)\n            return (Boolean)\nQtApplication.invokeDelegateMethod(QtApplication.onKeyUp, newKeyCode,\nevent);\n        else\n            return super.onKeyUp(newKeyCode, event);\n    }\n    public boolean super_onKeyUp(int keyCode, KeyEvent event)\n    {\n        return super.onKeyUp(keyCode, event);\n    } \n
Run Code Online (Sandbox Code Playgroud)\n\n

然后在 Qt 中:

\n\n
void MainWindow::keyPressEvent(QKeyEvent *k)\n{\n    if( k->key() == Qt::Key_MediaPrevious )\n    {\n        int ret = messageBox( QMessageBox::Yes | QMessageBox::No, "\xc2\xbfDesea salir de la aplicaci\xc3\xb3n?", QMessageBox::Question);\n\n        switch(ret)\n        {\n        case QMessageBox::Yes:\n            this->close();\n            break;\n\n        case QMessageBox::No:\n            break;\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

感谢 Koying 在此处发布此解决方案http://groups.google.com/group/android-qt/browse_thread/thread/676c24e94bb9a200?pli=1

\n