qmllocalstorageplugin.dll:QML 本地存储的加载入口
一、模块定位与文件构成
qmllocalstorageplugin.dll 是 Qt 官方 QtQuick.LocalStorage 模块的 QML 插件动态库,通常位于 Qt 安装目录的 qml/QtQuick/LocalStorage/ 文件夹内,与 qmldir、plugins.qmltypes 等文件配套存在。在 Windows 平台上,它并非被程序直接链接的普通库,而是在 QQmlEngine 解析 import QtQuick.LocalStorage 语句时按需加载的扩展插件。
二、核心功能
- QML 类型注册:插件入口派生自 QQmlExtensionPlugin,在 registerTypes() 中向 QML 类型系统注册 LocalStorage 单例,使 QML 文档可直接调用 LocalStorage.openDatabaseSync()。
- SQLite 数据持久化:内部封装 SQLite 引擎,依据 identifier、version、description、estimatedSize 参数创建或打开数据库文件,默认落盘到 QStandardPaths::AppDataLocation 下的 OfflineStorage/Databases 目录。
- 事务与查询抽象:把 Database、SQLTransaction、Statement 映射为 QML 可访问对象,提供 transaction()、executeSql()、rows.length 等同步接口。
- 版本迁移与连接缓存:处理数据库版本号比对与升级回调,并缓存已打开的连接,避免重复打开引发文件锁冲突。
部署提示
该 DLL 必须与 qmldir、plugins.qmltypes 一同拷贝,缺一不可;同时其 32 位 / 64 位版本要与主程序及 Qt 库保持一致。
三、缺少该 DLL 可能带来的影响
- 模块加载失败:QML 引擎抛出 module QtQuick.LocalStorage is not installed 或 plugin cannot be loaded,import 语句无法完成。
- 对象不可用:openDatabaseSync 返回 undefined,后续 transaction、executeSql 调用触发 TypeError,业务逻辑中断。
- 界面异常:若该 import 位于启动页或主 QML,程序可能白屏、闪退;若位于延迟加载页面,则切换到该页面时崩溃。
- 数据功能失效:本地缓存、离线草稿、用户偏好、历史记录等依赖 LocalStorage 的能力全部不可用,且不会自动降级到其他存储方式。
- 发布事故:使用 windeployqt 打包时遗漏 qml 目录,或误删插件目录,会在目标机器上集中复现上述故障。
四、排查方向
设置环境变量 QML_IMPORT_TRACE=1 可打印插件实际搜索路径;检查 qmldir 中 plugin 声明与文件名是否一致;用 dumpbin /dependents 验证 Qt5Core、Qt5Qml、Qt5Sql 等依赖是否齐全;确认 qsqlite 驱动与插件版本匹配,避免驱动缺失导致的二次失败。