当前位置: 首页 > 知识库问答 >
问题:

移动应用开发 - QT for Android应用关屏开屏后界面无反应如何解决?

汲灿
2025-03-16

QT for Android开发的应用在Android上关屏开屏后,操作页面没反应。

看过输出了,事件是有反应的,只是没刷新界面,但调用了刷新的代码又不生效。

共有1个答案

何禄
2025-03-16

针对Qt for Android应用在屏幕唤醒后界面无响应的典型解决方案:

  1. 生命周期事件处理(关键步骤)
    在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();
        }
    }
});
  1. 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">
  2. 强制渲染刷新(紧急修复)
    在可见性变化时触发:

    void YourWidget::showEvent(QShowEvent* event) {
     QTimer::singleShot(50, [this](){
         update();
         repaint();
         QCoreApplication::processEvents();
     });
    }
  3. OpenGL上下文处理(如使用QOpenGLWidget)

    void YourGLWidget::initializeGL() {
     connect(context(), &QOpenGLContext::aboutToBeDestroyed, this, [this](){
         m_texture.reset();
     });
    }
  4. 启动参数设置(项目配置)
    在main.cpp添加:

    QApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
    qputenv("QT_ANDROID_DISABLE_ACCESSIBILITY", "1");

典型问题排查流程:

  1. 检查是否收到QEvent::ApplicationActivate事件
  2. 使用adb logcat查看Qt的渲染日志
  3. 验证UI线程是否被阻塞(QThread::currentThread())
  4. 测试禁用Compositor模式(qputenv("QT_ENABLE_ANDROID_NATIVE_COMPOSITOR", "0"))

如仍不生效,可尝试在Java层触发:

@Override
protected void onResume() {
    super.onResume();
    if (m_qtThread != null) {
        m_qtThread.resumePainting();
    }
}
 类似资料:
  • 问题内容: 我在stackoverflow中发现了类似的问题。但我想具体一点。我访问了一个screencast-o- matic 网站。他们有一个Java applet的Web应用程序,该应用程序捕获屏幕以导出为视频。我想开发类似的应用程序。所需的知识和步骤是什么? 感谢致敬。 编辑另一个网站筛选器。 问题答案: 要获取屏幕截图,请使用。 要获取许多屏幕截图,请在(Swing)调用的循环中调用它。

  • 有没有人愿意帮助我在使用android studio的kotlin multi-platform mobile(KMM)和javafx(gluon)进行iOS/android应用程序开发之间做出决定。 -运行时性能(启动时间、代码大小、功耗等)-KMM的学习曲线(我不知道Kotlin,但如果KMM的开发环境只是在windows上两个目标平台,我就学会了。[gluon中的android开发需要lin

  • 新的iPhone5显示屏有了新的宽高比和新的分辨率(640 x 1136像素)。 开发新的应用程序或将现有的应用程序转换到新的屏幕大小需要什么? 为了使旧显示器和新宽屏的应用程序“通用”,我们应该记住什么?

  • 本文向大家介绍Android WebView 应用界面开发教程,包括了Android WebView 应用界面开发教程的使用技巧和注意事项,需要的朋友参考一下 WebView组件本身就是一个浏览器实现,Android5.0增强的WebView基于Chromium M37,直接支持WebRTC、WebAudio、WebGL。开发者可以直接在WebView中使用聚合(Polymer)和Material

  • 我有一个activity,它调用一个扩展SurfaceView并实现Runnable的类,并将activity类的contentView()设置为surfaceview类的实例。最小化活动后,我暂停并销毁线程: 当活动恢复时,我重新创建线程: 请注意,这些是在onP()和onResume()活动方法中调用的。 当我尝试重新打开应用程序时,我看到一个黑屏。我需要抽奖(画布)方法被绘制一次。有什么技巧

  • Android移动应用开发简介 概述 名词解释 开发流程 版本配置和资源变更 Android移动应用开发简介 更新时间:2018-07-04 15:15:15 概述 Link Develop提供的Android移动应用开发流程,主要侧重于帮助开发者在开发Android移动应用的过程中,将移动应用每个native版本,和阿里IoT平台上开放的各种物联能力:包括移动端SDK、移动插件、各种服务实现快速

  • iOS移动应用开发简介 概述 名词解释 开发流程 版本配置和资源变更 iOS移动应用开发简介 更新时间:2018-07-04 15:15:49 概述 Link Develop提供的iOS移动应用开发流程,主要侧重于帮助开发者在开发iOS移动应用的过程中,将移动应用每个native版本,和阿里IoT平台上开放的各种物联能力:包括移动端SDK、移动插件、各种服务实现快速无缝集成。 移动应用的工程创建、

  • 百度移动开发一面 - 为什么选择做安卓 - 安卓了解多少,技术非技术都可以 - 聊项目,登录采用的redis+cookie的分布式session解决方案,具体聊聊 - 登录过程当中对密码的校验,存储讲讲 - 面向对象的三大特性具体讲解下 - 讲讲java的权限空闲控制(protect继承关系,defualt是包访问权限) - java基本类型的以及占空间大小 - boolean类型占多大内存,in