5
votes

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'
3
Which files do you have in C:\Qt\Qt5.7.0\5.7\msvc2015\qml\QtQuick\Controls.2? It looks like it's trying to find the debug version of the plugin, but does your Qt installation have it available?jpnurmi
Yes, it the dll file is there in the path and loaded in visual studio (I see in the intellisense, its symbols loaded) but fails to load app.Reza Ebrahimi
For some reason it unloads the plugin right away? I don't know what could cause that. What happens if you open the plugin with Dependency Walker? Is this a pre-built Qt installation from an installer? If so, does the Qt Quick Controls 2 Gallery example work?jpnurmi
it unloads because of QQmlApplicationEngine failed to load component, so I'll use DependencyWalker, so the Gallery example works well when build and run from QtCreator.Reza Ebrahimi

3 Answers

8
votes

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
1
votes

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.

0
votes

If you are using Ubunty try to install qml-module-qtquick-controls2

sudo apt install qml-module-qtquick-controls2