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 Объект уничтожен.
Другие вопросы по тегам