Ошибка утверждения Qt virtualkeyboard в 5.15.2 против 5.12.3

Недавно я обновил свою версию Qt с на 5.15.2. Я перестроил приложение, использующее виртуальную клавиатуру qt в QML, используя InputPanel {}. Виртуальная клавиатура в основном определяется как qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));. Все работает в режиме выпуска, но когда я запускаю в режиме отладки, я получаю следующий вывод приложения от создателя qt:

      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) с участием Q_ASSERT(!this->inputPanel);. Я хотел сравнить этот метод с Github для 5.12.3, но похоже, что этот метод был добавлен после 5.12.3 поэтому я не видел ошибки раньше.

Теперь я понимаю, что Q_ASSERT(bool) позвоню qFatal()когда флаг ложный. Если inputPanel относится к типу QObject* должен ли Q_ASSERT быть Q_ASSERT(this->inputPanel)? Q_ASSERT должен срабатывать только тогда, когда указатель имеет значение nullptr. А может я просто запуталась?

1 ответ

Уже существовал отчет об ошибке в системе отслеживания ошибок Qt. Раньше я выполнял поиск только по виртуальной клавиатуре, а не по InputPanel. Отчет об ошибке здесь . Кстати, похоже, что это проблема только в режиме отладки, и обходной путь - несколько раз нажать кнопку игнорирования, чтобы продолжить работу в режиме отладки.

Другие вопросы по тегам