2016-06-25 5 views
3

У меня есть приложение, что его проект создан с использованием CMake в Qt5.7, поэтому, когда import QtQuick.Controls 2.0 приложение не удалось загрузить со следующей ошибкой:импорт QtQuick.Controls 2.0 не работает - QQmlApplicationEngine не удалось загрузить компоненту

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  
) 

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' 
+0

Какие файлы у вас есть в 'C: \ Qt \ Qt5.7.0 \ 5.7 \ msvc2015 \ qml \ QtQuick \ Controls.2'? Похоже, он пытается найти отладочную версию плагина, но имеет ли у вас установку Qt ее доступность? – jpnurmi

+0

Да, это файл dll находится в пути и загружен в visual studio (я вижу в intellisense, его символы загружены), но не загружает приложение. –

+1

Почему-то сразу выгружает плагин? Я не знаю, что может это сделать. Что произойдет, если вы откроете плагин с помощью Dependency Walker? Является ли это предустановленной установкой Qt у установщика? Если да, работает ли пример Qt Quick Controls 2 Gallery? – jpnurmi

ответ

4

Я нашел решение, проблема QtQuick.Controls 2.0 зависит от модуля QtQuick.Templates 2.0, поэтому я скопировал его dll в выходной каталог и успешно работает.

необходимые библиотеки DLL (для отладки версии):

Qt5QuickTemplates2d.dll 
Qt5QuickControls2d.dll 

необходимые библиотеки DLL (для версии Release):

Qt5QuickTemplates2.dll 
Qt5QuickControls2.dll 
+0

Возможно ли, что CMT интеграция Qt может/должна обрабатываться автоматически? Нормально ли, что вам нужно перечислить всю цепочку зависимостей вручную? Или это возможно отсутствие декларации зависимостей где-то в QQC2? – jpnurmi

+0

На самом деле, я просто заметил, что QtGui и QtXmlPatterns также явно не перечислены, поэтому они должны в какой-то степени разрешить зависимости. – jpnurmi

0

В Windows Qt предоставляет средства развертывания, которая автоматически сканирует все зависимости Qt и QML:

%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.