アサートはから起動されますQCompleter::complete(rect);
つまりQCompleter::widget()
ゼロです。プライベート メンバーd->widget
は常にゼロで初期化されます。そのタイプはQPointer<QWidget>
です。ウィジェットは によってのみ設定されQCompleter::setWidget(QWidget *widget)
ます。ドキュメントによるとQCompleter::setWidget(QWidget *widget)
:
補完が提供されるウィジェットをウィジェットに設定します。この関数は、 usingまたはusing
に aQCompleter
が設定されている
場合に自動的に呼び出されます。カスタム ウィジェットの補完を提供する場合は、ウィジェットを明示的に設定する必要があります。QLineEdit
QLineEdit::setCompleter()
QComboBox
QComboBox::setCompleter()
したがって、ウィジェットは byQCompleter::setWidget()
または byのいずれかで設定する必要がありますQLineEdit::setCompleter()
。これらのオプションが使用されてQCompleter::complete(rect)
いない場合、補完モードが でないと関数がクラッシュしますQCompleter::InlineCompletion
。
したがって、クラッシュには 2 つの可能性があります。
d->widget
呼び出す前に初期化されていませんQCompleter::complete(rect);
- で
d->widget
あるため、参照されたオブジェクトが破棄QPointer
されると、自動的に 0 に設定されます。QWidget