rootroot->service_01root->service_01->Method_01root->service_01->Method_02root->service_01->Method_03root->service_02root->service_01->Method_01root->service_01->Method_02
private: ModuleBase MyModuleBase;
void MyDialog::loadPlugins(const QString fileName){ QPluginLoader loader(fileName); QObject *plugin = loader.instance(); if (plugin) { PluginInterface*iMyModule = qobject_cast<PluginInterface*>(plugin); if (iMyModule ) { MyModuleBase = iMyModule ->create(); } }}
rootroot->bin <---- Здесь лежжат основные бинарники для комплексаroot->config <-------Здесь лежат конфиги бинарников, описанных вышеroot->config->plugins <-----Здесь лежат плагины форм (GUI) настройки сервисовroot->libs <--Здесь лежат основные библиотеки комплесаroot->services <-----Основная директория сервисовroot->services->bin <---- бинарники сервисовroot->services->config <---Конфиги сервисовroot->services->libs <--- Либы сервисов
#ifndef INTERFACES_H#define INTERFACES_Hclass MyModuleInterface{public: virtual ~MyModuleInterface() {} virtual void MyModuleStart() = 0; virtual void MyModuleStop() = 0;};Q_DECLARE_INTERFACE(MyModuleInterface, "mywww.My.MyModuleInterface/1.0")#endif
#ifndef MYPLUG_H#define MYPLUG_H#include <QObject>#include <QThread>#include "../app/interfaces.h"//это собственно определение моего модуля, который должен чо-то выполнятьclass TMyModule : public QThread{ Q_OBJECTprotected: void run();//тут добавлю потом в public, private различные необхлдимые мне методы//public: bool mabort;};//это как я понял плагин с интерфейсомclass MyModulePlugin : public QObject, public MyModuleInterface{ Q_OBJECT Q_INTERFACES(MyModuleInterface)public: void MyModuleStart(); void MyModuleStop();private: TMyModule Module;};#endif
#include <QtGui>#include "myPlug.h"/****** МОДУЛЬ ******/void TMyModule::run(){ printf("Module is Running \n"); while (!mabort) { sleep(1); printf("Run \n"); /* тут будет собственно реализован к примеру алгоритм работы модуля */ } printf("Module is Stopped \n");}/****** ПЛАГИН ******/void MyModulePlugin::MyModuleStart(){ Module.mabort = false; if (!Module.isRunning()) Module.start();}void MyModulePlugin::MyModuleStop(){ Module.mabort = true;}Q_EXPORT_PLUGIN2(mymoduleplugin, MyModulePlugin)