2011-04-18 241 views
1

我有一個Qt應用程序,它使用全局變量作爲指向某些單例服務對象的指針(我知道這不是最好的解決方案)。現在我想讓我的應用程序可以使用Qt插件進行擴展。我可以在插件中使用主程序的全局變量嗎?還是Qt插件有一個單獨的地址空間?在Qt插件中使用主程序的全局變量

回答

1

您的插件(.so或.DLL)將運行在相同的地址空間中。在插件體系結構中需要一些方法來將主要變量的地址提供給插件。

1

方便(但不是很乾淨)的方法之一是在您的應用程序中使用屬性。 在主要成分,你推一個指向這個全球到你的「主應用程序」:

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

其實我有這樣的想法。謝謝! – McNumber 2011-04-18 06:52:06

0

分配您的變量:

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

在你的插件,你可以用類似的東西檢索內存空間到一個QSharedMemory對象。當所有連接的線程和進程完成時,QSharedMemory將釋放。如果要爲所有進程使用分離的內存,則應使用進程ID作爲QSharedMemory對象的名稱。