Russian Qt Forum
Ноябрь 23, 2024, 02:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt5.5 beta apps deploying  (Прочитано 6398 раз)
Mike-Aiki
Гость
« : Май 18, 2015, 11:15 »

Попробовал недавно вышедшую Qt 5.5 beta, x86, mingw492. Простое тестовое приложение с несколькими виджетами без WebKit вроде как не требует icu-библиотек для автономного запуска, обошелся стандартным набором dll:

libgcc_s_dw2-1.dll
libstdc++-6.dll
libwinpthread-1.dll
platforms/qwindows.dll
Qt5Core.dll
Qt5Gui.dll
Qt5Widgets.dll

Запускается везде.

А вот с QML-приложениями какая-то чехарда. На домашнем компе W7Pro x64 приложение (Qt Quick 2.2) запускается с набором dll

libgcc_s_dw2-1.dll
libstdc++-6.dll
libwinpthread-1.dll
platforms/qwindows.dll
Qt5Core.dll
Qt5Gui.dll
Qt5Widgets.dll
Qt5Network.dll
Qt5Qml.dll
Qt5Quick.dll  - (интересно, что в зависимостях exe нет, но без него просто висит в процессах, и все) .

На других компах не смог запустить. Приложение не ругается ни на что при запуске, просто висит тихо в процессах, на экран ничего не выводится. Так и не понял, что же ему надо еще... Улыбающийся
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Май 18, 2015, 11:40 »

С Кьютом поставляется утилита windeploy (или как-то так) - она хорошо подтягивает все зависимости. Очень рекомендую.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Mike-Aiki
Гость
« Ответ #2 : Май 18, 2015, 13:12 »

С Кьютом поставляется утилита windeploy (или как-то так) - она хорошо подтягивает все зависимости. Очень рекомендую.

Windeployqt.exe.  Пробовал. Не помогло. Или ее в 5.5 не допилили.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Май 18, 2015, 13:31 »

Ты ей указывал путь к своим qml файлам? Это обязательно нужно.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Mike-Aiki
Гость
« Ответ #4 : Май 18, 2015, 15:09 »

Ты ей указывал путь к своим qml файлам? Это обязательно нужно.

Спасибо за наводку - не дочитал описание утилиты... Подмигивающий  Указал путь - создалась еще куча папок для QML, программа-таки запустилась.

Но вот какие забавные вещи наблюдаю:
Создал дистрибутив с помощью Windeployqt в папке 1 (там был только exe-шник)
- Удаляю все qml-папки из 1  (оставляю только platforms) - запускается!
- Копирую папку 1 в папку 3 (без qml-папок) - запускается !!
- Рядом находится папка 2 с _тем_же_ набором dll, что в 1 - оттуда не запускается.
- Копирую в папку 2 qml-папки - запускается, удаляю qml-папки - не запускается.

Чертовщина какая-то...  Непонимающий

  Понятно, что лучше весь этот qml-довесок тянуть в дистрибутиве...
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #5 : Май 19, 2015, 11:06 »

я с qml мало имел дело, но может попробовать хранить qml файлы в ресурсах приложения?
Записан
Mike-Aiki
Гость
« Ответ #6 : Май 20, 2015, 14:07 »

я с qml мало имел дело, но может попробовать хранить qml файлы в ресурсах приложения?

Они и так в ресурсах, вопрос не в этом. Просто для распространения QML-приложения требуется еще куча всего, кроме dll. Для примера можно в каталоге QtCreator глянуть на папки QtQml, QtQuick, QtQuick2. А утилите Windeployqt нужно обязательно указать путь к своим qml-исходным файлам, она, как я понимаю, анализирует секции 'import' и создаёт список требуемых файлов (и копирует их).
Записан
BuRn
Гость
« Ответ #7 : Июль 23, 2015, 00:00 »

С qml все сложно на самом деле, особенно сложно если вы захотите собирать статику. Я Вам рассскажу, скорее всего вам должно помочь.
Для запуска в статике qml приложения потребовалось положить все qml сырцы(все что вы делаете import blablabla), поставляемые с Qt, рядом с вашими исходниками. Далее нужно заставить ваше qml приложение использовать ваши скопированные стационарные qml файлы. Все это нужно упаковать в ресурсы по хорошему(именно так делал я, но по идее скорее всего будет работать и без ресурсов). Далее в проекте прилинковать нужные библиотеки от qml.
Код:
        LIBS += -lqmlfolderlistmodelplugin
        LIBS += -lqquicklayoutsplugin
        LIBS += -ldialogplugin
        LIBS += -lqtquickcontrolsplugin
        LIBS += -lqmllocalstorageplugin
        LIBS += -lparticlesplugin
        LIBS += -lwindowplugin
        LIBS += -lqmlxmllistmodelplugin
        LIBS += -lqtquick2plugin
На 5.5 может что-то поменялось, не смотрел еще. Далее в main нужно добавлять следующую штуку
Код:
    Q_IMPORT_PLUGIN(QtQuick2Plugin)
    Q_IMPORT_PLUGIN(QQmlLocalStoragePlugin)
    Q_IMPORT_PLUGIN(QtQuickLayoutsPlugin)
    Q_IMPORT_PLUGIN(QtQuick2DialogsPlugin)
    Q_IMPORT_PLUGIN(QtQuickControlsPlugin)
    Q_IMPORT_PLUGIN(QtQuick2ParticlesPlugin)
    Q_IMPORT_PLUGIN(QtQuick2WindowPlugin)
    Q_IMPORT_PLUGIN(QmlXmlListModelPlugin)
    Q_IMPORT_PLUGIN(QmlFolderListModelPlugin)
    registerStaticPlug(qt_static_plugin_QtQuick2Plugin(),           "QtQuick",viewer.engine());
    registerStaticPlug(qt_static_plugin_QQmlLocalStoragePlugin(),   "QtQuick.LocalStorage",viewer.engine());
    registerStaticPlug(qt_static_plugin_QtQuickLayoutsPlugin(),     "QtQuick.Layouts",viewer.engine());
    registerStaticPlug(qt_static_plugin_QtQuick2DialogsPlugin(),    "QtQuick.Dialogs",viewer.engine());
    registerStaticPlug(qt_static_plugin_QtQuickControlsPlugin(),    "QtQuick.Controls",viewer.engine());
    registerStaticPlug(qt_static_plugin_QtQuick2ParticlesPlugin(),  "QtQuick.Particles",viewer.engine());
    registerStaticPlug(qt_static_plugin_QtQuick2WindowPlugin(),     "QtQuick.Window",viewer.engine());
    registerStaticPlug(qt_static_plugin_QmlXmlListModelPlugin(),    "QtQuick.XmlListModel",viewer.engine());
    registerStaticPlug(qt_static_plugin_QmlFolderListModelPlugin(), "Qt.labs.folderlistmodel",viewer.engine());
После всех манипуляций должно заработать. Возможно вам поможет. Но я склонен думать что для вашего случая вам нужно просто иметь рядом исходники qml
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 22.