QT for Android开发的应用在Android上关屏开屏后,操作页面没反应。
看过输出了,事件是有反应的,只是没刷新界面,但调用了刷新的代码又不生效。
QT for Android开发的应用在Android上关屏开屏后,操作页面没反应。
看过输出了,事件是有反应的,只是没刷新界面,但调用了刷新的代码又不生效。
针对Qt for Android应用在屏幕唤醒后界面无响应的典型解决方案:
生命周期事件处理(关键步骤)
在QML主文件或C++入口处添加应用状态监听:
// QML方案
Connections {
target: Qt.application
onStateChanged: {
if (Qt.application.state === Qt.ApplicationActive) {
canvas.requestPaint()
loader.sourceComponent = undefined
loader.sourceComponent = yourComponent
}
}
}
// C++方案(QObject派生类中)
QGuiApplication::instance()->applicationStateChanged().connect([](Qt::ApplicationState state){
if(state == Qt::ApplicationActive) {
qApp->sendPostedEvents();
QWindowList windows = qApp->allWindows();
for(QWindow* w : windows) {
w->requestUpdate();
}
}
});
AndroidManifest.xml配置优化
<activity android:name="org.qtproject.qt5.android.bindings.QtActivity"
android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation"
android:resizeableActivity="false">
强制渲染刷新(紧急修复)
在可见性变化时触发:
void YourWidget::showEvent(QShowEvent* event) {
QTimer::singleShot(50, [this](){
update();
repaint();
QCoreApplication::processEvents();
});
}
OpenGL上下文处理(如使用QOpenGLWidget)
void YourGLWidget::initializeGL() {
connect(context(), &QOpenGLContext::aboutToBeDestroyed, this, [this](){
m_texture.reset();
});
}
启动参数设置(项目配置)
在main.cpp添加:
QApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
qputenv("QT_ANDROID_DISABLE_ACCESSIBILITY", "1");
典型问题排查流程:
如仍不生效,可尝试在Java层触发:
@Override
protected void onResume() {
super.onResume();
if (m_qtThread != null) {
m_qtThread.resumePainting();
}
}