I have an app that its project generated using CMake
in Qt5.7
,
so when import QtQuick.Controls 2.0
application failed to load with the following error:
plugin cannot be loaded for module "QtQuick.Controls": Cannot load library C:\Qt\Qt5.7.0\5.7\msvc2015\qml\QtQuick\Controls.2\qtquickcontrols2plugind.dll: The specified module could not be found.
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
)
The DLL
file loaded in visual studio output:
'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'
I found the solution, The problem is QtQuick.Controls 2.0
depends on QtQuick.Templates 2.0
module so I have copied its dll to output directory and it runs successfully.
required DLLs (for Debug version):
Qt5QuickTemplates2d.dll
Qt5QuickControls2d.dll
required DLLs (for Release version):
Qt5QuickTemplates2.dll
Qt5QuickControls2.dll
On Windows Qt provides deployment tool which automatically scans all Qt and QML dependencies:
%QTDIR%\bin\windeployqt.exe your_app.exe --qmldir your\qml\files
See the Qt documentation:
The tool can be found in QTDIR/bin/windeployqt. It takes an .exe file or a directory that contains an .exe file as an argument, and scans the executable for dependencies. If a directory is passed with the --qmldir argument, windeployqt uses the qmlimportscanner tool to scan QML files inside the directory for QML import dependencies. Identified dependencies are then copied to the executable's directory. The hardcoded local paths in Qt5Core.dll are furthermore replaced with relative ones.
If you are using Ubunty try to install qml-module-qtquick-controls2
sudo apt install qml-module-qtquick-controls2
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With