Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

import QtQuick.Controls 2.0 not working - QQmlApplicationEngine failed to load component

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'
like image 218
Reza Ebrahimi Avatar asked Jun 25 '16 15:06

Reza Ebrahimi


3 Answers

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
like image 177
Reza Ebrahimi Avatar answered Nov 08 '22 22:11

Reza Ebrahimi


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.

like image 41
tommyk Avatar answered Nov 08 '22 21:11

tommyk


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

sudo apt install qml-module-qtquick-controls2
like image 1
Andrey Semenov Avatar answered Nov 08 '22 21:11

Andrey Semenov