C
将 Qt Quick Ultralite 应用程序构建为静态库
本主题提供了构建 Qt Quick Ultralite 应用程序作为静态库并与其外部项目集成的说明。
作为库构建
Qt Quick Ultralite 允许您使用 CMake 函数 qul_add_target 将 Qt Quick Ultralite 应用程序构建为静态库。除非在参数列表中添加了 STATIC_LIBRARY
选项,否则该函数默认构建一个可执行目标。请参见以下示例
qul_add_target(example_app STATIC_LIBRARY source1.cpp source2.cpp)
注意:静态库设置不能为 Qt Quick Ultralite FreeRTOS 平台配置编译,但它可以用于裸机配置并与其他外部 FreeRTOS 设置一起使用。虽然这种方法可行,但并不推荐,因为它可能导致意外的行为。
如果在 CMake 项目的文件中设置了 app_target_default_entrypoint,则会生成并复制到库输出目录的 qul_run.h
头文件。头文件包含具有 C-连接的 qul_run()
函数,该函数提供了标准的 Qt Quick Ultralite 应用程序入口点。
app_target_default_entrypoint(<target> QML_PROJECT <item>)
其中,target
是由 qul_add_target CMake 函数创建的目标,item
是将包含 Qt Quick Ultralite 应用程序配置的 QmlProject 文件的名称。
C-链接函数
为了允许更细致地控制 Qt Quick Ultralite 引擎的初始化步骤和调度,当构建作为静态库的应用程序时,会公开以下 C-链接函数
void
qul_init_hardware(void);void
qul_init_platform(void);void
qul_init_application(void);QulErrorHandler
*qul_set_error_handler(QulErrorHandler *handler);const
char *qul_error_code_to_string(enum QulError code);uint64_t
qul_update_engine(void);void
qul_app_exec(void);
生成的 qul_run.cpp
文件最终将如下所示
extern "C" { Qul::Application& _qul_app() { static Qul::Application _qul_app; return _qul_app; } mainScreen& _qul_item() { static struct ::mainScreen _qul_item; return _qul_item; } void qul_init_hardware(void) { Qul::initHardware(); } void qul_init_platform(void) { Qul::initPlatform(); } void qul_init_application(void) { _qul_app().setRootItem(&_qul_item()); #ifdef APP_DEFAULT_UILANGUAGE _qul_app().settings().uiLanguage.setValue(APP_DEFAULT_UILANGUAGE); #endif } uint64_t qul_update_engine(void) { return _qul_app().update(); } void qul_app_exec(void) { _qul_app().exec(); } } // extern "C" int qul_run(bool initializeHardware) { if (initializeHardware) qul_init_hardware(); qul_init_platform(); qul_init_application(); qul_app_exec(); return 0; }
将静态库与外部项目集成
要将Qt Quick Ultralite应用库与外部项目集成,请将该外部项目与它以及所有使用的Qt Quick Ultralite库链接。一些库版本会根据Qt Quick Ultralite的配置有所不同。以下表格总结了这些库版本及其对应的Qt Quick Ultralite配置。
字体引擎 | |||
---|---|---|---|
MCU.Config.fontEngine == 静态(默认) | MCU.Config.fontEngine == Spark | ||
Qul::MonotypeUnicodeEngineShaperDisabled | CMake属性/变量 | 1 、ON 或True | 0 、OFF 或False |
MCU.Config.platformImageAlignment | (默认) Qul::MonotypeFontEngine | Qul::MonotypeFontEngineAligned | |
MCU.Config.complexTextRendering | (默认) Qul::MonotypeShaperEngine Qul::MonotypeUnicodeEngine | Qul::MonotypeUnicodeEngineShaperDisabled | |
PNG解码器(仅在使用PNG文件时需要该库) | ||
---|---|---|
CMake属性/变量 | 1 、ON 或True | 0 、OFF 或False |
ImageFiles.MCU.resourceCompression | Qul::PNGDecoderLodePNG | Qul::PNGDecoderNull(默认) |
此外,将Qt Quick Ultralite的include
路径复制或添加到外部项目的包含路径中。如果Qt Quick Ultralite应用提供了默认条目点,请复制或添加生成的qul_run.h
头文件路径到外部项目的包含路径中。
接下来,在外部项目中重用现有的Qt Quick Ultralite平台抽象代码,或者为您目标板创建一个新的。有关更多信息,请参阅Qt Quick Ultralite平台移植指南。
最后,根据在应用程序中运行Qt Quick Ultralite指南,在外部项目中创建一个入口点函数。如果使用默认条入口点,包含生成的qul_run.h
头文件,并在期望位置调用qul_run()
函数来初始化和启动Qt Quick Ultralite引擎。
注意:Qul::initHardware()在调用qul_run()
且将initializeHardware
设置为false
时不会调用。
调用qul_run()函数后,控制跳转到Qul::Platform::exec()
,这是特定于每个平台抽象的。所有与Qt for MCUs一起提供的平台抽象示例的实现中都包含一个无限while循环。这意味着其余的UI代码必须移动到相应的Qul::Platform::exec()
实现,或者它必须是基于中断的。
如果外部项目使用RTOS,Qt Quick Ultralite可以在单独的线程中运行。在这种情况下,用户需要提供带有Qt Quick Ultralite的安全接口,因为嵌入式事件系统不能从其他线程直接更新。
另请参阅:MCU.Config.fontEngine。
在本特定Qt许可证下可用。
了解更多。