Я просто читал о 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();
}
....
}
Все это код, который я бы поставил в один проект, скомпилировать его как плагин, а затем искать его в моем главном приложении и загрузить его. Я хотел бы создать экземпляр этого и пусть он создаст виджет, который я покажу.
Есть ли лучший способ сделать это, или это так?
Это то, что я не хочу создавать плагины для дизайнера. Не могли бы заботиться меньше, если люди использовали мой специальный виджет. Я хочу, чтобы иметь возможность загружать в виджеты во время выполнения, используя их механизм плагинов. – chikuba
Вам нужно создать виджеты из .ui-файлов или просто из их имен? –
Не думаю, что у меня есть ui-файлы. все мои виджеты - это только файлы h/cpp, где eveything создается через код. думая о создании плагина-объекта с функцией, которая создает виджет, и просто поместите мой специализированный виджет в тот же проект. это было бы уродливо? – chikuba