Russian Qt Forum
Ноябрь 25, 2024, 20:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QtPlugins несколько экземпляров одного плагина в одной программе  (Прочитано 4711 раз)
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« : Апрель 27, 2009, 22:17 »

Использую систему Qt плагинов - для своих плагинов в программе - потребовалось сделать возможность загрузки одного и того же плагина несколько раз! Как японял loader.instance() возвращает указатель на плагин уже загруженный ранее - возможно ли то что мне требуется?
Записан
kitov
Гость
« Ответ #1 : Апрель 27, 2009, 22:41 »

Не совсем понятно что именно ты хочешь .
Ты можешь "выгрузить" плагин - "unload" и загрузить его снова .
Записан
ритт
Гость
« Ответ #2 : Апрель 28, 2009, 01:04 »

видимо, требуется объект плагина использовать для различных нужд...
нет, загружать плагин более одного раза - неправильно. правильно будет воспользоваться фабрикой (т.е. плагин один, но сущностей может порождать более одной)
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #3 : Апрель 28, 2009, 02:12 »

Цитировать
видимо, требуется объект плагина использовать для различных нужд...
нет, загружать плагин более одного раза - неправильно. правильно будет воспользоваться фабрикой (т.е. плагин один, но сущностей может порождать более одной)

Да спасибо, буду делать.
Записан
sivitalik
Гость
« Ответ #4 : Апрель 02, 2011, 10:17 »

Я новичок, столкнулся с такой-же проблемой. Нужно иметь в программе несколько копий одного плагина. Напишите пожалуйста как это можно сделать. Спасибо.
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #5 : Апрель 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__
Записан
sivitalik
Гость
« Ответ #6 : Апрель 12, 2011, 13:32 »

Например так

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

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

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


Страница сгенерирована за 0.083 секунд. Запросов: 23.