【问题标题】:How to block the back key in android when using Qt使用Qt时如何阻止android中的后退键
【发布时间】:2012-02-09 22:21:36
【问题描述】:

如果有人在 Android 设备上按下后退键,我需要阻止我正在执行的应用退出,以便我可以发送一个消息框询问用户是否要离开应用,我发现使用:

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

我可以处理那个事件,我在我的 necessitas 项目中尝试过,但没有成功。 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);
}

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

【问题讨论】:

    标签: android c++ qt


    【解决方案1】:

    解决方法如下:

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

    然后在 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;
            }
        }
    }
    

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

    【讨论】:

      【解决方案2】:

      您可以为 Activity 编写 onKeyListener,检查键码,如果它们是您想要的,使用它们。至少,在Java中。当然,C++ 的可能性也不小。

      【讨论】:

        【解决方案3】:

        不太确定这是否适用于您的情况,但通常在 Android 中,在每个感兴趣的 Activity 中,您将使用以下内容来覆盖后退按钮的按下:

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

        【讨论】:

          猜你喜欢
          • 2017-09-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多