5.15.2 与 5.12.3 中的 Qt 虚拟键盘断言错误
Qt virtualkeyboard assertion error in 5.15.2 vs 5.12.3
我最近将我的 Qt 版本从 5.12.3
更新到 5.15.2
。我使用 InputPanel {}
在 QML 中重建了一个使用 qt 虚拟键盘的应用程序。虚拟键盘在 main 中定义为 qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));
。一切都在发布模式下工作,但是当我在调试模式下 运行 我从 qt creator 得到以下应用程序输出:
Program: C:\Qt.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 and the line number points to method void QVirtualKeyboardInputContextPrivate::registerInputPanel(QObject *inputPanel)
with Q_ASSERT(!this->inputPanel);
. I wanted to compare this method with Github for 5.12.3 上的源文件,但看起来这个方法是在 5.12.3
之后添加的,因此我之前没有看到错误。
现在,我的理解是 Q_ASSERT(bool)
会在标志为 false 时调用 qFatal()
。如果 inputPanel
是 QObject*
类型,那么 Q_ASSERT 应该是 Q_ASSERT(this->inputPanel)
吗? Q_ASSERT 只应在指针为 nullptr 时触发。或者也许我只是感到困惑?
Qt 的错误跟踪器上已经存在错误报告。以前我只搜索虚拟键盘而不是输入面板。错误报告是 here。顺便说一句,看起来这只是调试模式下的一个问题,解决方法是多次单击忽略按钮以继续调试模式。
编辑:Qt 回应说这个断言检查是为了确保整个应用程序中只有 1 个 InputPanel
组件。因此,我不确定当我们在 MVVM 架构设计中有多个动态视图时,InputPanel
应该如何工作,其中每个视图都有自己的自包含 InputPanel
。
Edit2:根据我上次的编辑评论进行更新。我将 InputPanel 放在控制 StackView 的主 qml 文件中,动态加载的视图能够使用相同的 InputPanel。
我最近将我的 Qt 版本从 5.12.3
更新到 5.15.2
。我使用 InputPanel {}
在 QML 中重建了一个使用 qt 虚拟键盘的应用程序。虚拟键盘在 main 中定义为 qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));
。一切都在发布模式下工作,但是当我在调试模式下 运行 我从 qt creator 得到以下应用程序输出:
Program: C:\Qt.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 and the line number points to method void QVirtualKeyboardInputContextPrivate::registerInputPanel(QObject *inputPanel)
with Q_ASSERT(!this->inputPanel);
. I wanted to compare this method with Github for 5.12.3 上的源文件,但看起来这个方法是在 5.12.3
之后添加的,因此我之前没有看到错误。
现在,我的理解是 Q_ASSERT(bool)
会在标志为 false 时调用 qFatal()
。如果 inputPanel
是 QObject*
类型,那么 Q_ASSERT 应该是 Q_ASSERT(this->inputPanel)
吗? Q_ASSERT 只应在指针为 nullptr 时触发。或者也许我只是感到困惑?
Qt 的错误跟踪器上已经存在错误报告。以前我只搜索虚拟键盘而不是输入面板。错误报告是 here。顺便说一句,看起来这只是调试模式下的一个问题,解决方法是多次单击忽略按钮以继续调试模式。
编辑:Qt 回应说这个断言检查是为了确保整个应用程序中只有 1 个 InputPanel
组件。因此,我不确定当我们在 MVVM 架构设计中有多个动态视图时,InputPanel
应该如何工作,其中每个视图都有自己的自包含 InputPanel
。
Edit2:根据我上次的编辑评论进行更新。我将 InputPanel 放在控制 StackView 的主 qml 文件中,动态加载的视图能够使用相同的 InputPanel。