Estoy haciendo un programa basado en tareas que necesita tener complementos. Las tareas deben tener propiedades que puedan editarse fácilmente, creo que esto se puede hacer con las capacidades de reflexión del compilador meta-objeto de Qt (podría estar equivocado, pero debería poder incluir esto en un QtPropertyBrowser?)Intentando hacer un sistema de complemento en C++/Qt
Así que aquí está la base:
class Task : public QObject
{
Q_OBJECT
public:
explicit Task(QObject *parent = 0) : QObject(parent){}
virtual void run() = 0;
signals:
void taskFinished(bool success = true);
}
a continuación, un plugin puede tener esta tarea:
class PrinterTask : public Task
{
Q_OBJECT
public:
explicit PrinterTask(QObject *parent = 0) : Task(parent) {}
void run()
{
Printer::getInstance()->Print(this->getData()); // fictional
emit taskFinished(true);
}
inline const QString &getData() const;
inline void setData(QString data);
Q_PROPERTY(QString data READ getData WRITE setData) // for reflection
}
En pocas palabras, esto es lo que quiero hacer:
// load plugin
// find all the Tasks interface implementations in it
// have user able to choose a Task and edit its specific Q_PROPERTY's
// run the TASK
Es importante que un .dll tenga varias tareas, porque quiero que estén asociadas por su módulo. Por ejemplo, "FileTasks.dll" podría tener tareas para eliminar archivos, crear archivos, etc.
El único problema con la configuración del plugin de Qt es que quiero almacenar X cantidad de tareas en un módulo .dll. Por lo que puedo decir, solo puedes cargar una interfaz por complemento (¿podría estar equivocado?). Si es así, la única manera posible de lograr lo que quiero es crear FactoryInterface con claves basadas en cadenas que devuelvan los objetos (como en el ejemplo de Plug and Paint de Qt), que es una repetición terrible que me gustaría evitar.
¿Alguien conoce una arquitectura de plugins C++ más limpia que Qt para hacer lo que quiero?
Además, ¿estoy segura asumiendo capacidades de reflexión de Qt hará lo que yo quiero (es decir, capaces de editar las propiedades de un desconocido tareas de carga dinámica con el QtPropertyBrowser antes de enviar)?
Gran lectura y una solución de marco de ejemplo para arrancar. Básicamente, dice que solo necesita un sistema Factory más inteligente para evitar la repetición que las teclas de cadena le dan, supongo que estaba pensando demasiado en el problema. Esto probablemente resolverá mis problemas si puedo integrarlo. Gracias. –