Ошибка утверждения 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. Отчет об ошибке здесь . Кстати, похоже, что это проблема только в режиме отладки, и обходной путь - несколько раз нажать кнопку игнорирования, чтобы продолжить работу в режиме отладки.