Qt Quick(QML)應用部署比 Widgets 更複雜:windeployqt 僅能自動收集直接導入的 QML 模塊,無法感知運行時動態加載或C++ 端間接依賴(如 LocalStorage → Qt5Sql)。本文揭示部署「界面空白、模塊缺失」的根因,給出 main.cpp 顯式引入、.pro 聲明依賴的標準解法,並展示 Windows XP 兼容性實戰。
// main.qml import QtQuick.LocalStorage 2.0 // 靜態導入,windeployqt 可檢測 // 但 LocalStorage 內部依賴 Qt5Sql.dll,windeployqt 不會自動帶上!
現象:部署包含 Qt5Quick.dll、qml/QtQuick/LocalStorage,但缺 Qt5Sql.dll → 運行時靜默失敗,界面空白或報錯「module not installed」。
#include// 強制鏈接 Qt5Sql.dll #include // ... 其他必要模塊 int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); // ... }
QT += quick sql // sql 模塊帶入 Qt5Sql.dll // 如用網絡、XML、WebEngine 等同理添加 QT += network xml webengine
windeployqt --qmldir ../src/qml MyApp.exe # --qmldir 指定 QML 源碼目錄,幫助工具掃描 import 語句
Qt 5.5+ 官方不再支持 XP,但通過以下手段可在 XP SP3 上運行:
msvcrt.dll 版本兼容(XP 缺 vsprintf_s 等安全函數)。planets 例程在 2006 年 XP 機器上正常運行(見截圖)。| 項目 | 檢查點 |
|---|---|
| Qt 庫 | Core, Gui, Quick, Qml, Network, Sql... 按 .pro QT 變量 |
| 編譯器運行時 | MinGW: libgcc, libstdc++, libwinpthread; MSVC: vcruntime, msvcp |
| QML 插件 | qml/ 目錄下所有 import 使用的模塊 |
| C++ 間接依賴 | LocalStorage→Sql, WebEngine→WebEngineCore/WebEngineWidgets 等 |
| 圖片/圖標插件 | imageformats/, iconengines/ |
| 平台插件 | platforms/qwindows.dll (必須) |
| 翻譯文件 | translations/qt_zh_CN.qm 等 |