1

我最近将我的 Qt 版本5.12.35.15.2. 我在 QML 中使用 .qt 虚拟键盘重建了一个应用程序InputPanel {}。虚拟键盘在 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上检查了 5.15.2 的源文件,行号指向方法void QVirtualKeyboardInputContextPrivate::registerInputPanel(QObject *inputPanel)with Q_ASSERT(!this->inputPanel);. 我想将此方法与5.12.3 的 Github 进行比较,但看起来此方法是在之后添加的,5.12.3因此我之前没有看到错误。

现在,我的理解是当标志为假时Q_ASSERT(bool)会调用。qFatal()如果inputPanel是类型QObject*应该 Q_ASSERT 是Q_ASSERT(this->inputPanel)?Q_ASSERT 应该只在指针为空指针时触发。或者我只是很困惑?

4

1 回答 1

0

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

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

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

于 2021-04-28T16:50:50.013 回答