Развертывание приложения в QML Qt5
для тестирования развертывания QML я создал очень простое приложение QML. Вот код:
main.cpp
#include <QApplication>
#include <QQmlApplicationEngine>
#include <QFile>
int main(int argc, char **argv) {
QApplication app(argc, argv);
QQmlApplicationEngine engine;
QString path = app.applicationDirPath() + "/qml/main.qml";
if(QFile::exists(path))
engine.load(path);
else {
return 1;
}
return app.exec();
}
main.в QML
import QtQuick 2.2
import QtQuick.Controls 1.2
ApplicationWindow {
id: mainWindow
title: "Test window"
width: 800
height: 600
visible: true
}
чтобы убедиться, что в системе не установлена библиотека разработки, я настроил виртуальную машину с чистой установкой Windows XP. Затем я следовал инструкциям, как описано здесь и скопировал все Qt5*.dll в каталог программы, а также платформы/qwindows.dll и icu * 52.файл DLL. Dependency Walker подтвердил, что никаких сломанных зависимостей не осталось, т. е. все должно было быть правильно настроено.
однако, по некоторым причинам, когда я запускаю мое приложение я ничего не вижу. Ни окна, ни сообщения об ошибке. Запуск с консоли также не дает мне никакой ошибки. Несмотря на это, я вижу, что мое приложение работает в диспетчере задач, как и в фоновом режиме. Запуск приложения на машине разработки проходит без проблем: приложение правильно запускается, и я вижу его окна.
что я делаю не так? Как я могу развернуть приложение QML, чтобы быть уверенным, что оно будет работать на любой другой - не - машине разработки?
3 ответов
если вы используете MinGW, попробуйте скопировать все папки из папок в QML и Плагины в папку с вашей программой. Также скопируйте библиотеки:icudt52.dll
, icuin52.dll
, icuuc52.dll
, libgcc_s_dw2-1.dll
, libstdc++-6.dll
, libwinpthread-1.dll
, Qt5Core.dll
, Qt5Gui.dll
, Qt5Network.dll
, Qt5Qml.dll
, Qt5Quick.dll
, Qt5Svg.dll
, Qt5Widgets.dll
С bin
в конце концов каталог будет выглядеть так способ работает на WindowsXP / Win7, где Qt не был установлен.
Это то, что я выяснил до сих пор,
вы не можете просто открыть файл qml в main.cpp, вы должны поместить эти qmls в ресурс
в QML.qrc:
<RCC>
<qresource prefix="/">
<file>main.qml</file>
</qresource>
</RCC>
затем main.cpp должен загрузить его с ресурса
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
затем создайте и проверьте его работу, а затем разверните следующим образом:
- найдите каталог releasse, где живет ваш EXE
- найдите каталог, где живет ваш QML
- создать каталог где-нибудь, скажем, deploy
затем
cd deploy
windeployqt --release --qmldir <qml-dir-location> <exe-location>
Примечание: добавьте местоположение windeployqt в путь например. C:\Qt\Qt5.5.1\5.5\msvc2013\bin
вы должны использовать инструмент развертывания, который поставляется с Qt. См.Qt для Windows - развертывание, есть раздел "средство развертывания Windows".