在Qt插件中使用主程序的全局变量

时间:2011-04-18 06:32:27

标签: c++ qt plugins

我有一个Qt应用程序,它使用全局变量作为指向某些单例服务对象的指针(我知道这不是最好的解决方案)。现在我想用Qt插件使我的应用程序可扩展。我可以在插件中使用主程序的全局变量吗?或者Qt插件是否有单独的地址空间?

3 个答案:

答案 0 :(得分:1)

您的插件(.so或.DLL)将在同一地址空间中运行。您需要在插件架构中使用一些方法来为插件提供主要变量的地址。

答案 1 :(得分:1)

一种方便(但不那么干净)的方法是在应用程序上使用属性。 在主组件中,将指向此全局的指针推送到“主应用程序”:

qApp->setProperty("StringProperty",qVariantFromValue(qobject_cast<QObject*>(this )));          

在您的插件中,您可以使用以下内容检索它:

QObject* pMyobject = qApp->property("StringProperty").value<QObject*>(); 

答案 2 :(得分:0)

将变量内存空间分配给QSharedMemory对象。当所有连接的线程和进程完成时,QSharedMemory释放。如果要为所有进程使用单独的内存,则应使用进程标识作为QSharedMemory对象的名称。