示例
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 属性的方式进行加载.