2012-05-13 76 views
1

我使用plotter = qobject_cast<PlotterInterface*>(plugin);初始化一個插件當我關閉應用程序時,在closeEvent(QCloseEvent *event)我嘗試刪除插件delete plotter;但我碰到了。如果我沒有錯,只是用new創建的對象可以被刪除。爲什麼我得到這個崩潰?在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 * pluginLoader = new QPluginLoader(pluginDir.absoluteFilePath(fileName)); QObject * plugin = pluginLoader-> instance(); plotter = qobject_cast (插件); plotter-> initPlotter(); – develoops

回答

1

從文檔:

QPluginLoader::instance

...根組件,該函數返回,不在QPluginLoader被銷燬時被刪除。如果你想確保根組件被刪除,你應該調用卸載()一旦你不必再訪問的核心部件...

QPluginLoader::unload

不要嘗試刪除根組件。相反,依靠unload()會在需要時自動刪除它。

嘗試使用unload並查看問題是否存在。