Tworzę program zadaniowy, który wymaga wtyczek. Zadania muszą mieć właściwości, które można łatwo edytować, myślę, że można to zrobić za pomocą funkcji refleksji Kompilatora Metaobiektu Qt (mógłbym się mylić, ale powinienem móc to włożyć w QtPropertyBrowser?)Próba stworzenia systemu wtyczek w C++/Qt
Więc oto podstawa:
class Task : public QObject
{
Q_OBJECT
public:
explicit Task(QObject *parent = 0) : QObject(parent){}
virtual void run() = 0;
signals:
void taskFinished(bool success = true);
}
Następnie plugin może mieć to zadanie:
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
}
W skrócie, oto co chcę zrobić:
// 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
Ważne jest, aby jeden .dll miał wiele zadań, ponieważ chcę, aby były powiązane przez ich moduł. Na przykład "FileTasks.dll" może mieć zadania do usuwania plików, tworzenia plików itp.
Jedynym problemem z konfiguracją wtyczki Qt jest zapisanie X ilości zadań w jednym module .dll. O ile mogę powiedzieć, możesz załadować tylko jeden interfejs na wtyczkę (mógłbym się mylić?). Jeśli tak, jedynym możliwym sposobem osiągnięcia tego, czego chcę, jest stworzenie FactoryInterface z kluczami opartymi na łańcuchach, które zwracają obiekty (jak w przykładzie Qt Plug-And-Paint), co jest okropnym szablonem, którego chciałbym uniknąć.
Ktoś zna czystszą architekturę wtyczki C++ niż Qt, aby robić to, co chcę?
Również ja bezpiecznie zakładając możliwości odbicia Qt będzie robić to, co chcę (to znaczy w stanie edytować właściwości nieznanego załadowane dynamicznie Zadania z QtPropertyBrowser przed wysyłką)?
Świetna lektura i przykładowe rozwiązanie do uruchamiania systemu. Zasadniczo mówi, że potrzebujesz mądrzejszego systemu Factory, aby uniknąć zestawu znaków, który dają ci klucze strunowe, przypuszczam, że nadmiernie myślałem o problemie. To prawdopodobnie rozwiąże moje problemy, jeśli będę mógł je zintegrować. Dzięki. –