QCompleter время выполнения сбой
Я хочу сделать Code Completer, поэтому я подкласс QCompleter:
http://hastebin.com/qeyumevisa.cpp
Но, когда я пытаюсь запустить этот код, я получаю ошибку времени выполнения:
И отладочный вывод показывает:
ASSERT: "d->widget != 0" in file util\qcompleter.cpp, line 1446
Авария, похоже, произошла из строки 53:
QCompleter::complete(rect);
Как я могу исправить эту ошибку? Спасибо
1 ответ
Актер уволен из 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
Объект уничтожен.