1

plotter = qobject_cast<PlotterInterface*>(plugin);When i close applicationを使用してプラグインを初期 化します。プラグcloseEvent(QCloseEvent *event)インを削除しようとしましdelete plotter;たが、クラッシュしました。私が間違っていなければ、 new で作成されたオブジェクトだけを削除できます。なぜこのクラッシュが発生するのですか?

編集 (プラグインのインポート):

QPluginLoader* pluginLoader = new QPluginLoader(pluginDir.absoluteFilePath(fileName)); 
QObject* plugin = pluginLoader->instance(); 
plotter = qobject_cast<PlotterInterface*>(plugin); 
plotter->initPlotter();
4

1 に答える 1

1

ドキュメントから:

QPluginLoader::インスタンス

...この関数によって返されるルート コンポーネントは、QPluginLoader が破棄されても削除されません。ルート コンポーネントを確実に削除したい場合は、コア コンポーネントにアクセスする必要がなくなったらすぐに unload() を呼び出す必要があります...

QPluginLoader::アンロード

ルート コンポーネントを削除しようとしないでください。代わりに、必要に応じて unload() が自動的に削除することに依存してください。

unload を使用してみて、問題が解決しないかどうかを確認してください。

于 2012-05-13T13:11:03.583 に答える