| Родител: Applications Subsystem | Architecture Overview |
Class: ApplicationsManager
Inherits: QProcessManager
Pattern: Singleton
Location: src/apps/Daqster/ApplicationsManager.{h,cpp}
ApplicationsManager е специализиран process manager за Daqster приложението. Наследява QProcessManager и добавя специфична функционалност за Daqster environment setup.
Автоматично разпознава дали приложението работи в AppImage контейнер и конфигурира пътищата съответно.
Настройва QT_PLUGIN_PATH да сочи към Daqster плъгините:
QT_PLUGIN_PATH=<install_dir>/plugins/Daqster
Конфигурира XDG директории за кеш, конфигурация и данни:
XDG_CACHE_HOMEXDG_CONFIG_HOMEXDG_DATA_HOMEПоддържа headless mode за пускане на множество плъгини без GUI (полезно за тестване).
ApplicationsManager& manager = ApplicationsManager::Instance();
void StartApplication(const QString& name,
const QStringList& arguments,
QProcess::OpenMode mode = QProcess::ReadWrite);
bool GetAppDescryptor(const AppHndl_t& handle,
AppDescriptor_t& descriptor) const;
void SetHeadlessMode(bool enabled);
void ApplicationEvent(const AppHndl_t& appHandle,
const AppEvent_t& event);
События:
APP_NA - Not availableAPP_STARTED - Приложението стартираAPP_STOPED - Приложението спряЗа съвместимост със стар код:
typedef ProcessEvent_t AppEvent_t;
typedef ProcessDescriptor_t AppDescriptor_t;
typedef ProcessHandle_t AppHndl_t;
void setupProcessEnvironment(QProcess* process,
const QString& name,
const QStringList& arguments) override;
Извиква базовата имплементация и добавя Daqster-specific настройки:
QT_PLUGIN_PATH// Get singleton instance
ApplicationsManager& manager = ApplicationsManager::Instance();
// Connect to events
connect(&manager, &ApplicationsManager::ApplicationEvent,
[](const auto& handle, const auto& event) {
if (event == ApplicationsManager::APP_STARTED) {
qDebug() << "Application started:" << handle;
}
});
// Start a plugin
QStringList args = {"--config", "debug.ini"};
manager.StartApplication("MyPlugin", args);
// Enable headless for testing
manager.SetHeadlessMode(true);