2012-02-10 3 views
1

Я просто читал о QWidgets, и я хотел бы создать плагины, которые являются виджетами, которые будут загружены во время выполнения. Когда я смотрел пример кода и требования, плагин, похоже, наследует интерфейс и QObject. Как создать QWidget-плагины, где все они имеют разные кнопки и разные слоты? Кроме того, было бы возможно создать плагин, который наследует интерфейс и базовый класс, который наследует от QWidget (который наследуется от QObject).Как создать плагин qt, который наследуется от QWidget

http://developer.qt.nokia.com/doc/qt-4.8/plugins-howto.html

Однако, я читал о метаобъекте, где вы можете загрузить виджеты во время выполнения, только зная их имена (не требует поддержки RTTI). Но как именно я мог бы довести классы до знака, чтобы он узнал их? Что касается плагинов, мне нужно иметь их в специальном проекте, который я компилирую с различными наборами флагов в .pro-файле. Но как мне это сделать?

Я бы очень хотел использовать qtplugin, но как?

идея:

было бы приемлемым и оптимальным, чтобы плагин создать QWidget, что он возвращается? На самом деле не вижу смысла писать плагины в конструктор, если я создаю свой интерфейс без него. Или я его неправильно понял?

http://techbase.kde.org/Development/Tutorials/Writing_Qt_Designer_Plugins

class workspaceInterface { 
    virtual QWidget* createWorkspace(QWidget* parent); 
    ... other useful functions... 
} 

class mySpecialWidget : public QWidget { 
    mySpecialWidget { 
     add a layout, add some buttons, maybe change the color 
    } 
} 

//plugin 
#include "myspecialwidget.h" 

class myPlugin : public QObject, public workspaceInterface { 
    QWidget* createWorkspace(QWidget* parent) { 
     return new MySpecialWidget(); 
    } 
    .... 
} 

Все это код, который я бы поставил в один проект, скомпилировать его как плагин, а затем искать его в моем главном приложении и загрузить его. Я хотел бы создать экземпляр этого и пусть он создаст виджет, который я покажу.

Есть ли лучший способ сделать это, или это так?

ответ

0

Возможно, вы ищете Creating Custom Widgets for Qt Designer. Плагины виджетов наследуются от QWidget. Например, см. World Time Clock Plugin.

Хотя плагины виджетов предназначены в основном для Qt Designer, некоторые из их функциональных возможностей можно использовать во время выполнения с помощью QUiLoader.

Edit:

Это, безусловно, некоторые инвестиции, чтобы написать Qt Designer плагинов. Если вам не нужна поддержка времени разработки, вы можете найти мало смысла в их создании.

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

+0

Это то, что я не хочу создавать плагины для дизайнера. Не могли бы заботиться меньше, если люди использовали мой специальный виджет. Я хочу, чтобы иметь возможность загружать в виджеты во время выполнения, используя их механизм плагинов. – chikuba

+0

Вам нужно создать виджеты из .ui-файлов или просто из их имен? –

+0

Не думаю, что у меня есть ui-файлы. все мои виджеты - это только файлы h/cpp, где eveything создается через код. думая о создании плагина-объекта с функцией, которая создает виджет, и просто поместите мой специализированный виджет в тот же проект. это было бы уродливо? – chikuba