LINUX.ORG.RU

Плагин Qt и встраиваемый виджет


0

0

Пишу я значит программу. Хочу там сделать в виде плагинов некоторые классы, которые наследуются от базового. Базовый включает QWidget, чтобы можно было делать так:

QList< base_class * > myPluginsList;

myPluginsList << new MyPlugin;
myPluginsList[0].show();

А в системе плагинов как я понимаю, плагин выдергивается через qobject_cast. Как мне реализовать подобное поведение с плагинами? Ещё вопрос: стоит ли привязывать плагинов-детей к базовому классу, писать там коструктор вида base_class(QWidget *parent = 0): QWidget(parent){}? При том надо учесть, что виджет, который идет в плагин, сам встраивается в класс плагина. Потому делать ещё один ui и просто отображать его по методу из основного не прокатит.



Последнее исправление: ShTH (всего исправлений: 2)

А точнее напиши, что ты хочешь

qobj_cast нужен из-за ограниченности передачи информации о типах. Но это можно обойти и пользоваться dynamic_cast'ом

А второе - это когда как

namezys ★★★★
()
Ответ на: комментарий от namezys

Вот базовый класс: http://code.google.com/p/qmeco/source/browse/trunk/video_converter/video_codecs/qmcbasevideocodec.h

Вот пример дочернего класса: http://code.google.com/p/qmeco/source/browse/trunk/video_converter/video_codecs/nuv/nuv.h

А вот тут мы используем их: http://code.google.com/p/qmeco/source/browse/trunk/video_converter/video_codecs/qmcvideocodecs.h

Загляни там в конструктор, там добавляются они. Вот подобное мне нужно с помощью плагинов сделать, т.е.: сканирую директорию, затем подключаю все найденные там плагины, потом закидываю их в список, где они приводятся к типу базового класса.

ShTH
() автор топика
Ответ на: комментарий от ShTH

ну ты правильно подумал.

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

То есть при создании плагина тебе создается фабрика, а не объект. Имхо так лучше

namezys ★★★★
()
Ответ на: комментарий от namezys

Хм... то есть можно в самом ИНТЕРФЕЙСЕ не наследовать QWidget, А сделать виртуальную функцию, которая в дочернем классе (уже наследующем QWidget) будет возвращать QWidget(this) или как-то так?

ShTH
() автор топика
Ответ на: комментарий от namezys

Значит так и сделаю, спасибо.

ShTH
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.