在Qt插件中使用全局变量的主程序
Using global variables of main program in Qt plugin
我有一个Qt应用程序,它使用全局变量作为指向一些单例服务对象的指针(我知道这不是最好的解决方案)。现在我想让我的应用程序与Qt插件可扩展。我可以在插件中使用主程序的全局变量吗?或者Qt插件有一个单独的地址空间?
您的插件(so或. dll)将在相同的地址空间中运行。您需要在插件体系结构中使用一些方法来向插件提供主要变量的地址。
一种方便(但不太干净)的方法是在应用程序中使用属性。在主组件中,你把一个指向这个全局变量的指针推入你的"主应用程序":
qApp->setProperty("StringProperty",qVariantFromValue(qobject_cast<QObject*>(this )));
在你的插件中,你可以像这样检索它:
QObject* pMyobject = qApp->property("StringProperty").value<QObject*>();
将变量内存空间分配给QSharedMemory对象。当所有连接的线程和进程完成后,QSharedMemory将被释放。如果您希望为所有进程使用分离的内存,您应该使用进程id作为QSharedMemory对象的名称。
相关文章:
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 当vector是tje全局变量时,c++中vector的内存管理
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 内联函数中具有内部链接的全局变量
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 全局变量 多读取器 一个写入器多线程安全?
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 不同作用域中的静态变量和全局变量
- C++ 在编译时具有函数计算全局变量
- 修改程序的入口点时未调用全局变量的构造函数
- 使用 std::ios_base::Init 正确初始化全局变量
- 为什么我的全局变量似乎没有变化?
- C ++程序如何返回我的数组或写入全局变量
- 为什么我的数组值与此处的全局变量不匹配?
- QT C++中对全局变量的未定义引用
- 跨多个类的全局变量而不会出现重定义错误?
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- C++线程不检测全局变量更改
- 如何在主程序流中不调用全局变量的情况下填充全局变量
- 在Qt插件中使用全局变量的主程序