Witam. Tworzę aplikację opartą na pluginach. Piszę w QT, ale korzystam tylko z QLibrary nie z QPluginLoader itp. Właśnie myślę nad jakimś interfejsem i natknąłem się na pewien problem. Czy lepiej do głównej aplikacji przesyłać tylko listę dotyczącą pozycji w potencjalnym menu i komendy jakie plugin obsługuje, czy lepiej przy ładowaniu plugina przesłać wskaźnik do głównego okna i tworzyć wpisy menu bezpośrednio w pluginie ?
0
0
Też zaraz będę męczył pluginy w Qt i ogólnie widzę to tak, że w interfejsie pluginu(tym z klasy bazowej) deklarujesz np. metodę, która zwróci listę obiektów QMenu na przykład. Ja nic bym nie pchał do pluginu - jedynie udostępnił metody w bazowej pluginu, by zwrócił wszystko to, co potrzeba pokazać na zewnątrz. Mam nadzieję że nie przekombinowałem w swoim opisie.
0
Trochę myślałem nad tym i wstępnie skleciłem coś takiego:
class IPlugin : public QObject
{
Q_OBJECT
public:
virtual ~IPlugin() {}
virtual QString my_getName() = 0; --------------> myślę że tutaj lepiej będzie jeśli zwróci mi bardziej szczegółowe informacje (wersja pluginu, wersja api, nazwa)
virtual QMenu* my_getMainMenu() = 0; --------------> menadżer pobiera i ładuje menu do głównej aplikacji
virtual QToolBar* my_getToolBar() = 0; --------------> to samo co wyżej
virtual QSystemTrayIcon* my_getTrayIcon() = 0; ----> tak na wszelki wypadek, żeby była taka mozliwość
virtual QMenu* my_getTrayIconMenu() = 0; ----------> menu do ikonki .
QMap<QString, QMdiSubWindow*> my_subWindowsMap; -> lista okien mdi
protected:
QString my_nameOfPlugin;
QMainWindow *my_mainWindowPtr; --------------> wsk do głównego okna (mam wtedy w pluginie kontrolę nad oknem );
QMdiArea *my_mainMdiAreaPtr; ------------------> wsk do mdiarea, gdzie będę dodawał okna MDI za pomocą funkcji my_doCommand i trzymał je w my_subWindowsMap...
public slots:
virtual void my_doCommand(const QString &cmd, const QString &cmdParams) = 0; --------------> funkcja, która będzie wykonywała różne rzeczy, na podst. param. "cmd"
virtual void my_doMenuAction(QAction *action) = 0; --------------> tą funkcją chcę 'złączyć' funkcje toolbarów i menu z funkcją my_doCommand na podstawie nazwy akcji.
};
No i teraz pytanie - czy taki interfejs jest ogólnie OK, czy zawiera jakieś grubsze wady, które wyjdą za np. tydzień :) ??? Mnie się wydaję że będzie OK i nie będzie żadnych niespodzianek .