Я хочу сделать Code Completer, так что я подкласс QCompleter:
http://hastebin.com/qeyumevisa.cpp
Но, когда я пытаюсь запустить этот код, я получаю ошибку времени выполнения:
И отладочный вывод показывает:
ASSERT: "d->widget != 0" in file util\qcompleter.cpp, line 1446
Похоже, что авария произошла из строки 53:
QCompleter::complete(rect);
Как я могу исправить эту ошибку? Спасибо
Актер уволен из QCompleter::complete(rect);
Это означает, что QCompleter::widget()
это ноль. Частный член d->widget
всегда инициализируется нулем. Его тип QPointer<QWidget>
, Виджет задается только QCompleter::setWidget(QWidget *widget)
, Согласно документации QCompleter::setWidget(QWidget *widget)
:
Устанавливает виджет, для которого предусмотрено завершение для виджета. это
Функция автоматически вызывается, когдаQCompleter
установлен на
QLineEdit
с помощьюQLineEdit::setCompleter()
или наQComboBox
с помощью
QComboBox::setCompleter()
, Виджет должен быть установлен явно, когда
предоставление дополнений для пользовательских виджетов.
Таким образом, виджет должен быть установлен либо QCompleter::setWidget()
или QLineEdit::setCompleter()
, Если не один из этих вариантов используется функция QCompleter::complete(rect)
падает, если режим завершения не QCompleter::InlineCompletion
,
Итак, есть две возможности сбоя:
d->widget
не инициализируется перед вызовом QCompleter::complete(rect);
d->widget
это QPointer
он может быть автоматически установлен в 0, когда на него ссылаются QWidget
Объект уничтожен.