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

Posted

技术标签:

【中文标题】在Qt插件中使用主程序的全局变量【英文标题】:Using global variables of main program in Qt plugin 【发布时间】:2011-04-18 06:32:27 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于在Qt插件中使用主程序的全局变量的主要内容,如果未能解决你的问题,请参考以下文章

QT/C++外部变量或者全局变量怎么使用,来个能说清楚的。

QT如何设置可变的全局变量

Qt学习: 如何在Qt中使用全局变量!出现无法解析的命令的问题看过来!!

在Qt项目中添加全局宏变量来达到按方案编译的目的

QT 全局变量的问题,添加一个信号 让某个全局变量的值改变 其他窗口能响应这个变化

Qt全局宏和变量