Russian Qt Forum

Qt => Общие вопросы => Тема начата: break от Апрель 27, 2009, 22:17



Название: QtPlugins несколько экземпляров одного плагина в одной программе
Отправлено: break от Апрель 27, 2009, 22:17
Использую систему Qt плагинов - для своих плагинов в программе - потребовалось сделать возможность загрузки одного и того же плагина несколько раз! Как японял loader.instance() возвращает указатель на плагин уже загруженный ранее - возможно ли то что мне требуется?


Название: Re: QtPlugins несколько экземпляров одного плагина в одной программе
Отправлено: kitov от Апрель 27, 2009, 22:41
Не совсем понятно что именно ты хочешь .
Ты можешь "выгрузить" плагин - "unload" и загрузить его снова .


Название: Re: QtPlugins несколько экземпляров одного плагина в одной программе
Отправлено: ритт от Апрель 28, 2009, 01:04
видимо, требуется объект плагина использовать для различных нужд...
нет, загружать плагин более одного раза - неправильно. правильно будет воспользоваться фабрикой (т.е. плагин один, но сущностей может порождать более одной)


Название: Re: QtPlugins несколько экземпляров одного плагина в одной программе
Отправлено: break от Апрель 28, 2009, 02:12
Цитировать
видимо, требуется объект плагина использовать для различных нужд...
нет, загружать плагин более одного раза - неправильно. правильно будет воспользоваться фабрикой (т.е. плагин один, но сущностей может порождать более одной)

Да спасибо, буду делать.


Название: Re: QtPlugins несколько экземпляров одного плагина в одной программе
Отправлено: sivitalik от Апрель 02, 2011, 10:17
Я новичок, столкнулся с такой-же проблемой. Нужно иметь в программе несколько копий одного плагина. Напишите пожалуйста как это можно сделать. Спасибо.


Название: Re: QtPlugins несколько экземпляров одного плагина в одной программе
Отправлено: break от Апрель 09, 2011, 14:12
Например так

Код:

#ifndef __WAG_DEV_PLUGIN_H__
#define __WAG_DEV_PLUGIN_H__

#include <QtPlugin>
#include "WagDev.h"

///////////////////////////////////////////////////////////////////
// Wagon Device Loader Interface
///////////////////////////////////////////////////////////////////

/*!
Класс интерфейс предназначенный для загрузки конкретного вагонного устройства из динамической библиотеки.
Класс нужен так как ситема плагинов Qt не позволяет загружать один плагин 2 раза в систему, поэтому присутствует
функция IWagDev * makeInstance(), которая должна создать конкретное вагонное устройство.
Кроме того в качестве интерфейсного класса для системы плагинов Qt должен выступать чисто абстрактный класс, а
для вагонов хочется использовать неабстрактный базовый класс в котором реализована часть функциональности.
*/

class IWagDevPlugin
{
public:
virtual ~IWagDevPlugin() = 0;
virtual IWagDev * makeInstance( CBaseObject * pOwner ) = 0;
};

Q_DECLARE_INTERFACE( IWagDevPlugin, "RusTrain.Wag.Device.Plugin" );

#endif // __WAG_DEV_PLUGIN_H__


Название: Re: QtPlugins несколько экземпляров одного плагина в одной программе
Отправлено: sivitalik от Апрель 12, 2011, 13:32
Например так

Спасибо за пример.

Я пока не разобрался с менеджером плагинов. Может кто нибудь поможет выбрать верный путь?
1. Есть mdi приложение.
2. Окна в mdi приложении создаются плагинами.
3. Функцией плагина меняется информация в созданном окне.

Вопросы следующие:
1. Как лучше хранить экземпляры загруженных плагинов?
2. Как перехватить вызов закрытия окна прагина, и выгрузить соответствующий плагин из хранилища плагинов.