5.15.2 与 5.12.3 中的 Qt 虚拟键盘断言错误

如何解决5.15.2 与 5.12.3 中的 Qt 虚拟键盘断言错误

我最近将 Qt 版本从 5.12.3 更新为 5.15.2。我使用 InputPanel {} 在 QML 中重建了一个使用 qt 虚拟键盘的应用程序。虚拟键盘在 main 中定义为 qputenv("QT_IM_MODULE",QByteArray("qtvirtualkeyboard"));。一切都在发布模式下工作,但是当我在调试模式下运行时,我从 qt creator 获得以下应用程序输出

Program: C:\Qt\5.15.2\msvc2019_64\bin\Qt5Cored.dll
Module: 5.15.2
File: qvirtualkeyboardinputcontext_p.cpp
Line: 221

ASSERT: "!this->inputPanel" in file qvirtualkeyboardinputcontext_p.cpp,line 221

我检查了 Github for 5.15.2 上的源文件,行号指向方法 void QVirtualKeyboardInputContextPrivate::registerInputPanel(QObject *inputPanel)Q_ASSERT(!this->inputPanel);。我想将此方法Github for 5.12.3 进行比较,但看起来此方法是在 5.12.3 之后添加的,因此我之前没有看到错误

现在,我的理解是 Q_ASSERT(bool) 会在标志为 false 时调用 qFatal()。如果 inputPanelQObject* 类型,那么 Q_ASSERT 应该是 Q_ASSERT(this->inputPanel) 吗? Q_ASSERT 应该只在指针为 nullptr 时触发。或者我只是困惑?

解决方法

在 Qt 的错误跟踪器上已经有一个现有的错误报告。以前我只通过虚拟键盘而不是 InputPanel 进行搜索。错误报告是 here。顺便说一句,这似乎只是调试模式下的问题,解决方法是多次单击忽略按钮以继续调试模式。

编辑:Qt 回应说,此断言检查是为了确保整个应用程序中只有 1 个 InputPanel 组件。因此,当我们在 MVVM 架构设计中有多个动态视图时,我不确定 InputPanel 应该如何工作,其中每个视图都有自己的自包含 InputPanel

Edit2:根据我上次的编辑评论进行更新。我将 InputPanel 放在控制 StackView 的主 qml 文件中,动态加载的视图可以使用相同的 InputPanel。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?