QCompleter время выполнения сбой

Я хочу сделать Code Completer, так что я подкласс QCompleter:

http://hastebin.com/qeyumevisa.cpp

Но, когда я пытаюсь запустить этот код, я получаю ошибку времени выполнения:

Ошибка выполнения

И отладочный вывод показывает:

ASSERT: "d->widget != 0" in file util\qcompleter.cpp, line 1446

Похоже, что авария произошла из строки 53:

QCompleter::complete(rect);

Как я могу исправить эту ошибку? Спасибо

2

Решение

Актер уволен из 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 Объект уничтожен.
2

Другие решения


По вопросам рекламы [email protected]