2012-05-13 10 views
1

plotter = qobject_cast<PlotterInterface*>(plugin);を使用してプラグインを起動します。closeEvent(QCloseEvent *event)でプラグインを削除しようとしましたが、クラッシュします。もし私が間違っていないのであれば、新しく作成されたオブジェクトは削除することができます。なぜ私はこのクラッシュを得るのですか?プラグインをQtで削除する

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

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

どうやってプラグインを読み込んでいますか? – Mat

+0

はい、うまくいきます。 – develoops

+0

QPluginLoader *プラグインローダー=新しいQPluginLoader(pluginDir.absoluteFilePath(fileNameに)); QObject * plugin = pluginLoader-> instance(); プロッタ= qobject_cast (プラグイン)。 プロッタ - > initPlotter(); – develoops

答えて

1

ドキュメントから:

QPluginLoader::instance

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

QPluginLoader::unload

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

アンロードし、問題が解決しないかどうかを確認してみてください。

関連する問題