Как заблокировать клавишу возврата в Android при использовании Qt - PullRequest
6 голосов
/ 10 февраля 2012

Мне нужно запретить завершать работу приложения, которое он выполняет, если кто-то нажимает клавишу возврата на устройстве Android, чтобы я мог отправить сообщение, чтобы спросить, хочет ли пользователь покинуть приложение или нет, я обнаружил, что с помощью:

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

Я мог справиться с этим событием, я попробовал его на своем проекте нужных вещей, и он не сработал.Может ли 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, чтобы я отправил сообщение

Ответы [ 3 ]

4 голосов
/ 10 февраля 2012

Вот как это решить:

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

Благодаря Койингу, разместите это решение здесь http://groups.google.com/group/android-qt/browse_thread/thread/676c24e94bb9a200?pli=1

0 голосов
/ 10 февраля 2012

Не совсем уверен, относится ли это к вашей ситуации, но в Android в целом для каждого Activity интереса вы бы использовали следующее для отмены нажатия кнопки назад:

@Override
public void onBackPressed()
{
    // Make sure to NOT call super!
    ...
}
0 голосов
/ 10 февраля 2012

Вы можете написать onKeyListener для Activity, проверить коды клавиш и, если они того, что вы хотите, потребляет их. По крайней мере, на Java. Конечно, C ++ не имеет меньше возможностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...