Использование глобальных переменных основной программы в плагине Qt - PullRequest
1 голос
/ 18 апреля 2011

У меня есть приложение Qt, которое использует глобальные переменные в качестве указателей на некоторые одноэлементные сервисные объекты (я знаю, что это не лучшее решение). Теперь я хочу сделать мое приложение расширяемым с помощью плагинов Qt. Могу ли я использовать глобальные переменные основной программы в плагине? Или плагины Qt имеют отдельное адресное пространство?

Ответы [ 3 ]

1 голос
/ 18 апреля 2011

Одним из удобных (но не очень чистых) способов является использование свойств в вашем приложении. В главном компоненте вы помещаете указатель на этот глобальный элемент в ваше «основное приложение»:

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

В вашем плагине вы можете получить его примерно так:

QObject* pMyobject = qApp->property("StringProperty").value<QObject*>(); 
1 голос
/ 18 апреля 2011

Ваш плагин (.so или .DLL) будет работать в том же адресном пространстве.Вам нужны некоторые средства в вашей архитектуре подключаемых модулей, чтобы предоставить адрес основных переменных для подключаемых модулей.

0 голосов
/ 18 апреля 2011

Выделите пространство переменной памяти для объекта QSharedMemory . QSharedMemory освобождается, когда все связанные потоки и процессы завершены. Если вы хотите использовать разделенную память для всех ваших процессов, вы должны использовать идентификатор процесса в качестве имени объекта QSharedMemory.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...