【问题标题】:Qt virtualkeyboard assertion error in 5.15.2 vs 5.12.35.15.2 与 5.12.3 中的 Qt 虚拟键盘断言错误
【发布时间】:2021-07-21 02:26:36
【问题描述】:

我最近将我的 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 应该只在指针为空指针时触发。或者我只是很困惑?

【问题讨论】:

  • 既然你有商业许可证,我会向 TQtC 寻求支持。

标签: c++ qt qt5 qt5.12 qt5.15


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-05-03
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 2014-02-05
    • 2021-05-29
    • 1970-01-01
    相关资源
    最近更新 更多