Разработка функциональной и структурной схемы программного средства. Реализация основного модуля программы. Реализация модуля печати и модуля обновлений. Изучение взаимодействия информационных технологий, методов их интеграции и обмена данными.
Аннотация к работе
1. Аналитический обзор 1.1 Расширение возможностей браузера плагинами 1.2 Проксирование вызовов через теневую службу 1.3 Создание собственного веб-клиента 1.4 Анализ требований и выбор варианта решений 2. Проектирование структуры системы 2.1 Основная идея модульного деления 2.2 Межмодульное взаимодействие 2.2.1 Динамически подключаемые библиотеки (DLL) 2.2.2 Реализация межмодульного взаимодействия 2.2.3 Организация доступа к функциям 2.3 Проектирование ядра системы 2.3.1 Менеджер модулей 2.3.2 Гланый цикл программы (Main Loop) 2.3.3 Подсистема работы с параметрами 2.3.4 Модуль логирования 2.4 Проектирование главного окна системы 2.4.1 Chrome Embedded Framework 2.5 Проектирования модуля печати 2.6 Допущения и ограничения 2.7 Структурная схема системы 2.8 Функциональная схема системы 3. Разработка основных узлов системы 3.1 Среда разработки Qt Creator 3.1.1 Введение 3.1.2 Проекты 3.1.3 Редакторы 3.1.4 Языки 3.1.5 Цели 3.2 Разработка ядра системы 3.2.1 Разработка главной функции ядра системы 3.2.2 Разработка менеджера модулей 3.2.3 Разработка подсистемы работы с параметрами 3.2.4 Разработка подсистемы логирования 3.2.4 Разработка модуля обновлений 3.3 Разработка модуля главного окна системы и модуля печати 3.3.1 Разработка подсистемы загрузки файлов 3.3.2 Разработка подсистемы печати 3.3.3 Разработка подсистемы настроек 3.3.4 Создание инсталлятора программной системы 4. Основные результаты диссертационного исследования изложены в статье «Кроссплатформенный клиент корпоративной информационной системы», опубликованной в выпуске №67 научного журнала «NovaInfo». Обратитесь в техподдержку!; if(app->getAppLog()) app->getAppLog()->toLog(0)applicationVersion(), execAfterExit, QMessageBox::Ok); delete app; return 1; } if(initRez==0x01){ if(app->loadMainModule()){ app->exec(); execAfterExit=app->getUpdateCommand(); if(!execAfterExit.isEmpty()){ app->getAppLog()->toLog(9)getAppLog()) app->getAppLog()->toLog(0)applicationVersion(), execAfterExit, QMessageBox::Ok|QMessageBox::Cancel)!=QMessageBox::Ok) done=true; } } else{ execAfterExit=app->getUpdateCommand(); app->getAppLog()->toLog(9)saveParams(); delete app; if(!execAfterExit.isEmpty() && initRez==0x02) QProcess(0).startDetached(execAfterExit); return 0; } Приложение Б (Обязательное) Исходный код менеджера модулей #include gsmodule.h GSModule::GSModule(const QString &moduleName, const QString &modulesSection, QObject *parent): QObject(parent) { setObjectName(moduleName); m_DllInit=Q_NULLPTR; m_DllStart=Q_NULLPTR; m_DllStop=Q_NULLPTR; m_DllAbout=Q_NULLPTR; m_HandlersArray=Q_NULLPTR; m_WidgetsArray=Q_NULLPTR; m_Log=Q_NULLPTR; m_ModuleParamsSection=modulesSection / objectName() /; // load(); } GSModule::~GSModule() { unload(); m_Log=Q_NULLPTR; } char GSModule::init(void *abstractInterface) {TGetEventsHandlers getHandlers=Q_NULLPTR; TGetWidgetsList getWidgets=Q_NULLPTR; QSettings objectParams; objectParams.setValue(m_ModuleParamsSection version, about(ABOUT_VER)); if(!m_DllInit) return 0x00; if(!m_DllInit(abstractInterface, &m_ModuleParamsSection)) return 0x00; getHandlers=(TGetEventsHandlers) m_Library.resolve(getEventsHandlers); if(getHandlers) m_HandlersArray=(THandlersArray *)getHandlers(); getWidgets=(TGetWidgetsList) m_Library.resolve(getWidgetsList); if(getWidgets) m_WidgetsArray=(TWidgetsArray *)getWidgets(); return 0x01; } char GSModule::start() {QSettings objectParams; if(!m_DllStart) return 0x00; // objectParams.setValue(m_ModuleParamsSection version, about(ABOUT_VER)); return m_DllStart(); } char GSModule::stop() { m_HandlersArray=Q_NULLPTR; m_WidgetsArray=Q_NULLPTR; if(!m_DllStop) return 0x00; return m_DllStop(); } QString GSModule::about(char content) {QString mess; if(!m_DllAbout) return ; m_DllAbout(content, &mess); return mess; } bool GSModule::isLoaded() { return m_Library.isLoaded(); } bool GSModule::load() {QSettings objectParams; if(m_Library.isLoaded()) unload(); m_Library.setFileName(objectParams.value(m_ModuleParamsSection module_path,).toString() objectParams.value(m_ModuleParamsSection module_file,).toString()); gsInfo(m_Log,9)value(event,Q_NULLPTR); if(eventHandler){ eventHandler(param); return 0x01; } } return 0x00; } void *GSModule::getWidget(const QString &widgetId) { if(m_WidgetsArray) return m_WidgetsArray->value(widgetId,Q_NULLPTR); return Q_NULLPTR; } void GSModule::setLog(GSLog *log) { m_Log=log; } GSModulesManager::GSModulesManager(const QString &objectName, QObject *parent) : QObject(parent) { m_ModulesSection=objectName; setObjectName(objectName); m_Log=Q_NULLPTR; m_newExeName=; m_instReceivedName=; } GSModulesManager::~GSModulesManager() { unloadAllModules(); m_Log=Q_NULLPTR; } GSModule* GSModulesManager::loadModule(const QString &moduleName) {GSModule* module=Q_NULLPTR; if(moduleName.isEmpty()) return loadModule(m_MainModuleName); gsInfo(m_Log,9)objectName() == moduleName){ if(module->isLoaded()) return module; else{ module->load(); break; } } module=