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

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

【问题讨论】:

    标签: c++ qt plugins


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2021-04-08
          • 2014-07-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-11
          • 2014-11-17
          • 2013-11-16
          相关资源
          最近更新 更多