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



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

Program: C:Qt5.15.2msvc2019_64binQt5Cored.dll
Module: 5.15.2
File: qvirtualkeyboardinputcontext_p.cpp
Line: 221
ASSERT: "!this->inputPanel" in file qvirtualkeyboardinputcontext_p.cpp, line 221

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

现在,我的理解是,当标志为false时,Q_ASSERT(bool)将调用qFatal()。如果inputPanel属于QObject*类型,Q_ASSERT是否应为Q_ASSERT(this->inputPanel)?Q_ASSERT应仅在指针为nullptr时触发。或者我只是困惑?

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

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

第2版:根据我上次的编辑评论进行更新。我将InputPanel放在控制StackView的主qml文件中,并且动态加载的视图能够使用相同的InputPanel。

相关内容

  • 没有找到相关文章

最新更新