如何在使用Qt时阻止android中的后退键
How to block the back key in android when using Qt
如果有人按下安卓设备上的后退键,我需要阻止应用程序退出,这样我就可以发送一个消息框询问用户是否想离开应用程序,我发现使用:
@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上捕获事件,这样我就可以发送一条消息
以下是解决方法:
@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
您可以为"活动"编写onKeyListener,检查键代码,如果它们是您想要的,使用它们。至少,在Java。当然,C++的可能性并没有减少。
不太确定这是否适用于您的情况,但在Android中,通常情况下,在每个感兴趣的Activity
中,您都会使用以下内容来覆盖后退按钮按下:
@Override
public void onBackPressed()
{
// Make sure to NOT call super!
...
}
相关文章:
- Qt 和 Android - 如何使用 Qandroidjniobject 启动相机
- 如何在Android设备上解析Qt应用程序的ClassNotFoundEception?
- 如何在Qt中使用Android上的USB OTG串行接口?
- Qt QML for Android bugs
- Android因为权限问题而杀死Qt应用程序
- 部署基于 qt 的项目后,我的 sqlite3 文件不会被复制 (android)
- QT QML:使用.qrc文件将SQLite数据库部署到Android不起作用
- 将移动设备(iOS和Android)连接到带有QT / C++和镜像显示的VNC服务器
- QT-获取有关Android的清洁存储量信息
- 如何在Qt Android应用程序上禁用屏幕保护程序
- 基于 Qt、Qml 和 C++ 的应用程序移植到 Android
- QT用于Android-对AnativeWindow_FromSurface的未定义引用
- 将文件从资产复制到永久位置Qt + Android
- Android 和 IOS 上的 Qt 会话管理
- 适用于 iOS 和 Android 的 QT C++ 中的 HTTPS 请求
- 无法将OpenCV Android链接在QT中
- 在阅读Android中,nosuchmethoderror与JNI在QT上与JNI
- 在Android NDK项目中使用webrtc-58 - 使用QT构建时"Undefined reference to CopyOnWriteBuffer"
- 使用Java的Android QT开发 - 替代方案
- 如何在Android QT中播放音频文件