【问题标题】:import QtQuick.Controls 2.0 not working - QQmlApplicationEngine failed to load component导入 QtQuick.Controls 2.0 不起作用 - QQmlApplicationEngine 无法加载组件
【发布时间】:2016-06-25 15:44:10
【问题描述】:

我有一个应用程序,它的项目使用CMakeQt5.7 中生成, 所以当import QtQuick.Controls 2.0应用程序加载失败时出现以下错误:

无法为模块“QtQuick.Controls”加载插件:无法加载 图书馆 C:\Qt\Qt5.7.0\5.7\msvc2015\qml\QtQuick\Controls.2\qtquickcontrols2plugind.dll:找不到指定的模块。

CMakeLists.txt

set(CMAKE_PREFIX_PATH "C:\\Qt\\Qt5.7.0\\5.7\\msvc2015")
set(CMAKE_AUTOMOC ON) 
set(CMAKE_AUTORCC ON) 
set(CMAKE_AUTOUIC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

find_package(Qt5Core REQUIRED)
find_package(Qt5Qml) 
find_package(Qt5Quick) 
find_package(Qt5QuickControls2)

...

add_executable(MyApp ${SRC} ${HEADER} ${RESOURCES})

target_link_libraries(MyApp
Qt5::WinMain    
Qt5::Core   
Qt5::Qml    
Qt5::Quick  
Qt5::QuickControls2     
)

Visual Studio 输出中加载的DLL 文件:

'MyApp.exe' (Win32): Loaded 'C:\Qt\Qt5.7.0\5.7\msvc2015\qml\QtQuick.2\qtquick2plugind.dll'. Symbols loaded.
'MyApp.exe' (Win32): Loaded 'C:\Qt\Qt5.7.0\5.7\msvc2015\qml\QtQuick\Controls.2\qtquickcontrols2plugind.dll'. Symbols loaded.
'MyApp.exe' (Win32): Unloaded 'C:\Qt\Qt5.7.0\5.7\msvc2015\qml\QtQuick\Controls.2\qtquickcontrols2plugind.dll'

【问题讨论】:

  • C:\Qt\Qt5.7.0\5.7\msvc2015\qml\QtQuick\Controls.2 中有哪些文件?看起来它正在尝试查找该插件的调试版本,但是您的 Qt 安装是否可用?
  • 是的,它的 dll 文件在路径中并在 Visual Studio 中加载(我在智能感知中看到,它的符号已加载)但无法加载应用程序。
  • 由于某种原因它会立即卸载插件?我不知道是什么原因造成的。如果你用 Dependency Walker 打开插件会发生什么?这是来自安装程序的预构建 Qt 安装吗?如果是这样,Qt Quick Controls 2 Gallery 示例是否有效?
  • 由于 QQmlApplicationEngine 加载组件失败而卸载,所以我将使用 DependencyWalker,因此 Gallery 示例在从 QtCreator 构建和运行时运行良好。

标签: qt qtquick2 qt-quick qtquickcontrols qtquickcontrols2


【解决方案1】:

我找到了解决方案,问题是QtQuick.Controls 2.0 依赖于QtQuick.Templates 2.0 模块,所以我已将其 dll 复制到输出目录并成功运行。

所需的 DLL(用于调试版本):

Qt5QuickTemplates2d.dll
Qt5QuickControls2d.dll

所需的 DLL(对于发布版本):

Qt5QuickTemplates2.dll
Qt5QuickControls2.dll

【讨论】:

  • 这是 Qt 的 CMake 集成可以/应该自动处理的吗?您必须手动列出整个依赖链是否正常?或者它可能是在 QQC2 某处缺少依赖声明?
  • 其实我只是注意到QtGui和QtXmlPatterns也没有明确列出,所以它必须在一定程度上解决依赖关系。
【解决方案2】:

在 Windows 上 Qt 提供了自动扫描所有 Qt 和 QML 依赖项的部署工具:

%QTDIR%\bin\windeployqt.exe your_app.exe --qmldir your\qml\files

See the Qt documentation:

该工具可以在 QTDIR/bin/windeployqt 中找到。它需要一个 .exe 文件 或包含 .exe 文件作为参数的目录,并扫描 依赖项的可执行文件。如果一个目录与 --qmldir 参数,windeployqt 使用 qmlimportscanner 工具扫描目录内的 QML 文件以查找 QML 导入依赖项。确定 然后将依赖项复制到可执行文件的目录中。这 Qt5Core.dll 中硬编码的本地路径被替换为 相对的。

【讨论】:

    【解决方案3】:

    如果您使用的是 Ubunty,请尝试安装 qml-module-qtquick-controls2

    sudo apt install qml-module-qtquick-controls2
    

    【讨论】:

      猜你喜欢
      • 2022-07-09
      • 1970-01-01
      • 1970-01-01
      • 2015-04-06
      • 1970-01-01
      • 1970-01-01
      • 2015-06-28
      • 1970-01-01
      • 2019-01-09
      相关资源
      最近更新 更多