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

Using global variables of main program in Qt plugin

本文关键字:全局变量 主程序 Qt 插件      更新时间:2023-10-16

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

您的插件(so或. dll)将在相同的地址空间中运行。您需要在插件体系结构中使用一些方法来向插件提供主要变量的地址。

一种方便(但不太干净)的方法是在应用程序中使用属性。在主组件中,你把一个指向这个全局变量的指针推入你的"主应用程序":

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

在你的插件中,你可以像这样检索它:

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

将变量内存空间分配给QSharedMemory对象。当所有连接的线程和进程完成后,QSharedMemory将被释放。如果您希望为所有进程使用分离的内存,您应该使用进程id作为QSharedMemory对象的名称。