добрый день. возникла следующая проблема. хочу поместить в динамическую библиотеку qt виджет, чтобы через интерфейс отображать его на основном приложении
описываю интерфейс:
class ShapeInterface {
public:
virtual ~ShapeInterface() {}
virtual void up() = 0;
virtual void down() = 0;
virtual void left() = 0;
virtual void right() = 0;
};
реализую интерфейс в динамической библиотеке, и экспортирую функции создания/удаления виджета.
class RectangleShape : public QWidget, public ShapeInterface {
public:
RectangleShape(QWidget *parent = 0) : QWidget(parent) {}
~RectangleShape() {}
public:
void up() {}
void down() {}
void left() {}
void right() {};
};
extern "C" ShapeInterface *create_object(QWidget *parent)
{
return new RectangleShape(parent);
}
extern "C" void destroy_object(ShapeInterface *pObj)
{
delete pObj;
}
код реализации функций интерфейса значения не имеет. вобщем, пытаюсь работать как с классическим плагином на с++. вызываю из хостового приложения так:
QLibrary myLib(objPath);
typedef ShapeInterface *(*create_object)(QWidget *);
create_object myNew =
(create_object) myLib.resolve("create_object");
if (myNew) {
ShapeInterface *shapeInterface = myNew(this);
}
объект явно создается (конструктор во всяком случае срабатывает), вот только на родителе виджет не отображается, хотя информацию о родителе из динамической бибилотеки можно получить (заголовок окна, геометрию окна и тп). но почему то он не отображается. Это какая то ограниченность qt, либо я что то не так делаю?
в идеале, мне нужно поместить в библиотеку виджет, чтобы динамически подгружать и отображать его на главном окне приложения (на любом parent вобщем). смотрел классическую систему плагинов qt, но там как я понял, вообще виджеты нельзя запихнуть, только надстройку наж ними. Да и не хочется использовать qt-шные плагины, а остаться на стандартной архитектуре (с экспортом своих ctors/dtors).
спасибо за внимание