Развертывание приложения в 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".