示例

1. 公共库示例

1). eaEvent

位于 ./appBaseLibs/eaEvent 目录.

eaEvent 库为 EventAdmin 服务所依赖的公共库. 用于事件内容的包装, 内部实现依赖QT的 QVariantHash 等数据结构. 因此需要依赖 QT的 core 库. 最后将h文件及lib文件安装到 ./deps/workspace/install/${cpuType} 目录. 其CMakeList部分内容如下:

...

# 引用cmake模块
include(CagyMacros)

...

# 查找QT依赖
if(NOT Qt5_FOUND)
    find_package(Qt5 REQUIRED COMPONENTS Core)
endif()

...

# 编译为lib
add_library(${PROJECT_NAME} SHARED
    ${PROJ_SRCS}
)

# 设置版本号
set_target_properties(${PROJECT_NAME}
    PROPERTIES
        VERSION ${SHARED_LIBRARY_VERSION} SOVERSION ${SHARED_LIBRARY_VERSION}
        OUTPUT_NAME ${PROJECT_NAME}
        DEFINE_SYMBOL ${PROJECT_NAME}_LIBRARY
)

# 添加QT h文件包含路径
include_directories(SYSTEM
    ${QT_INCLUDE_DIR}
    ${QT_QTCORE_INCLUDE_DIR}
)

# 添加项目源码h文件包含路径
target_include_directories(${PROJECT_NAME}
    PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include
    PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src
)

# 链接QT依赖库
target_link_libraries(${PROJECT_NAME}
    PUBLIC
    Qt5::Core
)

# 安装lib
CAGY_INSTALL_LIB(${PROJECT_NAME})

# 安装h文件
install(FILES ${BaseLib_HEADERS}        COMPONENT Devel DESTINATION include)
install(FILES ${eaEvent_HEADERS}        COMPONENT Devel DESTINATION include/eaEvent)

# 导出库以便可以使用 find_package() 进行查找
CAGY_GENERATE_PACKAGE(eaEvent)

具体业务逻辑部分可查看示例源码.

2. OSP插件示例

1). eapub

位于 ./appTest/eapub 目录.

不带UI的OSP插件, 主要演示使用 EventAdmin 服务发布事件的各种方式.

2). easub

位于 ./appTest/easub 目录.

不带UI的OSP插件, 主要演示使用 EventAdmin 订阅事件.

3). pluginA

位于 ./appTest/pluginA 目录.

带UI的OSP插件, 插件界面用于显示到主界面中. 其通过 ServiceRegistry方式 将 服务进行注册发布, 工后续主界面调用以将插件内界面显示于主界面, 以及将 QObject 对象设置到 qml引擎的 rootContext 中.

3. QT插件示例

1). TestA

位于 ./appExtension/TestA 目录.

QT业务逻辑插件, 本示例演示在插件中通过 EventAdminService方式 调用外部 以 EventAdminService方式 发布的服务.

该插件通过在 carPram 文件中, PluginNode 节点上配置 model 属性的方式进行加载, 插件界面跟随业务模块切换一起切换, 此种情况插件lib库需要放到 ./deploy/bin/app/models/third 目录下, model 属性配置如下:

<PluginNode name = "VehicleCommand_random" type = "Vehicle" source = ""  model = "testa">

若将插件lib库放置于 ./deploy/bin/app/models/main 目录下, 则无需配置 carPram 文件, 插件界面会被主界面加载显示, 不会跟随业务模块一起切换.

2). TestB

QT业务逻辑插件, 本示例演示在插件中通过 EventAdminService方式 发布服务.

该插件库放置于 ./deploy/bin/app/models/third 目录, 通过在 carPram 文件中, PluginNode 节点上配置 model 属性的方式进行加载.