Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在Qt插件中使用主程序的全局变量_C++_Qt_Plugins - Fatal编程技术网

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

C++ 在Qt插件中使用主程序的全局变量,c++,qt,plugins,C++,Qt,Plugins,我有一个Qt应用程序,它使用全局变量作为指向某些单例服务对象的指针(我知道这不是最好的解决方案)。现在我想让我的应用程序可以用Qt插件扩展。我可以在插件中使用主程序的全局变量吗?或者Qt插件是否有单独的地址空间?您的插件(.so或.DLL)将在相同的地址空间中运行。在插件体系结构中,您需要一些方法来向插件提供主要变量的地址 一种方便(但不是很干净)的方法是在应用程序上使用属性。 在主组件中,将指向此全局的指针推送到“主应用程序”: qApp->setProperty(“StringPropert

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

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

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

qApp->setProperty(“StringProperty”,qVariantFromValue(qobject_cast(this));
在您的插件中,您可以通过以下方式检索它:

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

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

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