Andrei Yankovich
Andrei YankovichМамыр 27, 2019, 12:57 Т.Ж.

Qt және QML қолданбаларын Linux және Windows жүйелерінде қолдану

Кіріспе

Бұл мақалада біз динамикалық түрде жасалған қолданбаңыз үшін барлық qt тәуелділіктерін қалай дұрыс құру керектігін қарастырамыз.


Алдымен, кішкене теория.

Бұл не үшін қажет?

Қосымшаларды құрудың бірнеше жолы бар, олардың негізгілері:

  • Статикалық жинақ.
    Статикалық құрастыру екілік жүйені құруды қамтиды, ол оған барлық қажетті сілтемелерді қамтиды. Басқаша айтқанда, оның жұмысына қажеттінің бәрі болады. Бұл тәсіл тәуелділігі аз шағын консольдық қолданбалар үшін қолайлы, әйтпесе соңғы екілік файлдың өлшемі өте үлкен болады.

  • Динамикалық құрастыру.
    Оның статикалықтан айырмашылығы, екілік файлда қолданбаның бастапқы коды ғана болады (екілік файлдың өлшемі минималды болады), бірақ мұндай қолданбаны іске қосқан кезде ол жазу кезінде пайдаланылған үшінші тарап кітапханаларын қажет етеді. ол.

Енді кішкене сипаттама.

Console-QtDeployer — windeployqt және macdeployqt сияқты қарапайым қызметтік бағдарлама. 5/osx-deployment.html). Бірақ аналогтардан айырмашылығы, ол әлдеқайда икемді интерфейске (іске қосу жалаушалары) және жоғары жылдамдыққа ие, сонымен қатар ол 2 платформаны қолдайды windows және linux, яғни қазір біз Linux және керісінше терезелер үшін тәуелділіктерді құра аламыз.

Мысал келтірейік.

Мысалы, qml - MyApp көмегімен қарапайым qt қосымшасын жаздым.

Менің қолданбам (main.cpp)

#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main (int argc, char * argv [])
{
    QCoreApplication :: setAttribute (Qt :: AA_EnableHighDpiScaling);

    QGuiApplication app (argc, argv);

    QQmlApplicationEngine engine;
    engine.load (QUrl (QStringLiteral ("qrc: /main.qml")));
    if (engine.rootObjects (). isEmpty ())
        return -1;

    return app.exec ();
}

Менің қолданбам (main.qml)

import QtQuick 2.9
import QtQuick.Controls 2.2

ApplicationWindow {
    visible: true
    width: 640
    height: 480
    title: qsTr ("Scroll")

    ScrollView {
        anchors.fill: parent

        ListView {
            width: parent.width
            model: 20
            delegate: ItemDelegate {
                text: "Item" + (index + 1)
                width: parent.width
            }
        }
    }
}

MyApp динамикалық түрде қосылған, яғни жұмыс істеу үшін qt кітапханалары қажет.
Егер біз қолданбаны іске қосуға тырыссақ, құрастырудан кейін бірден қате пайда болады:

~/build-MyApp-Desktop_Qt_5_11_1_GCC_64bit4-Release $ ./MyApp ./MyApp: /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5: version `Qt_5 'not found (required by ./MyApp)
./MyApp: /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5: version `Qt_5 'not found (required by ./MyApp)
./MyApp: /usr/lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.11 'not found (required by ./MyApp)
./MyApp: /usr/lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5 'not found (required by ./MyApp)

Ұқсас мәтіндерден біз қолданбаның qt және qml графикалық кітапханаларына тәуелді екенін көреміз. Барлық ресурстарды (кітапханалар мен плагиндер) табу және құру көп уақытты алады.
Уақыт пен күш-жігерді үнемдеу үшін біз CQtDeployer утилитасын қолданамыз (оны мына жерден жүктеп алуға болады )
немесе Snap Store дүкенінде орнатыңыз

Snap Store дүкенінен жүктеп алу

cqtdeployer -bin myApp -qmake /media/D/Qt/5.12.3/gcc_64/bin/qmake -qmlDir ./

Осы пәрменді орындағаннан кейін сіз қолданбаңыздың барлық Linux машиналарында жұмыс істеуі үшін барлық қажетті орталарды орнататын дайын іске қосқышпен жұмыс істеуге толығымен дайын қолданбаны аласыз.

Жалпы

QtDeployer Console іске қосылғаннан кейін қолданбаңыз бар қалтаның мазмұны келесідей болуы керек:

drwxr-xr-x 7 andrei andrei 4096 May 24 12:22 ./
drwxrwxr-x 3 andrei andrei 4096 May 24 12:22 ../
drwxr-xr-x 2 andrei andrei 4096 May 24 12:22 bin/
drwxr-xr-x 2 andrei andrei 4096 May 24 12:22 lib/
-rwx---rwx 1 andrei andrei  433 May 24 12:22 myApp.sh*
drwxr-xr-x 6 andrei andrei 4096 May 24 12:22 plugins/
drwxr-xr-x 5 andrei andrei 4096 May 24 12:22 qml/
drwxr-xr-x 2 andrei andrei 4096 May 24 12:22 translations/

cqtdeployer нәтижесі

  • myApp.sh - қолданбаны іске қосу үшін сценарий
  • bin - екілік файлы бар қалта
  • lib - қолданбаның барлық қажетті тәуелділіктері бар қалта.
  • плагиндер - қолданба жұмыс істеуі үшін қажет qt плагиндері
  • qml - qml тәуелділіктері.
  • аудармалар – стандартты qt аудармалары.

Осылайша, сіз өзіңіздің өтініміңізді deb немесе snap пакетіне орау үшін дайындай аласыз, содан кейін оны таратуды бастай аласыз. cqtdeployer іске қосқаннан кейін қолданбаңыз үшін қажетті ортаны орнататын sh сценарийі арқылы қолданбаны іске қосу керек екенін ескеріңіз.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

Ruslan Polupan
  • Маусым 21, 2019, 3:54 Т.Ж.
  • (өңделген)

Напишите прожалуйста пример запуска для Windows :-)

отбой Разобрался.... После линуха сложно :-)

Andrei Yankovich
  • Маусым 21, 2019, 4:24 Т.Ж.
  • (өңделген)

Возможно кому то пригодится

сqtdeployer для windows работает точно так же как и для Linux

разница лишь в команде запуска

  • Linux: cqtdeployer
  • Windows: %cqtdeployer%

Подробная инструкция использования под Windows:

  1. Качаем онлайн истолятор на момент версии 1.2.3 интерполятор не подписан, по этому Windows может ругаться.
  2. Устанавливаем
  3. Открываем cmd
  4. Пишем %cqdeployer%
Ruslan Polupan
  • Маусым 21, 2019, 4:31 Т.Ж.

Вот моя строка по которой все отлично сработало

%cqtdeployer% -bin c:/CentralMposKeys/CentalMposKeys.exe -qmake c:/Qt/5.12.2/mingw73_64/bin/qmake.exe
juvf
  • Жел. 28, 2021, 11:56 Т.Қ.

написал приложение, холоворд на qt виджетах, без qml. Из визарда QtCreator. Собрал кросскомпилятором. Нужно перенести на таргет.

juvf@juvf-VirtualBox:~/qtWs/test/imx6/release$ ~/CQtDeployer/1.5/cqtdeployer.sh -bin test -qmake ~/soft/juvfTool/arm-buildroot-linux-gnueabihf/sysroot/home/juvf/tools/imx6/qt5_15_2_J/bin/qmake -qmlDir ./
Info: Deploy ...
Info: The targetDir option is not used. CQtDeployer will use default target dir :/home/juvf/qtWs/test/imx6/release/DistributionKit
Info: copy :/home/juvf/qtWs/test/imx6/release/test
Warning: Failed to extract qml! The qt qml dir is not initialized!
Warning: Failed to copy standard Qt translations
Info: deploy done!
Info: copy :/home/juvf/qtWs/test/imx6/release/DistributionKit/tmp_data/Application/bin/qt.conf
Info: copy :/home/juvf/qtWs/test/imx6/release/DistributionKit/tmp_data/Application/bin/test
Info: copy :/home/juvf/qtWs/test/imx6/release/DistributionKit/tmp_data/Application/test.sh
juvf@juvf-VirtualBox:~/qtWs/test/imx6/release$

после имею ТОЛЬКО скрипт test.sh и папку bin в которой два файла: само приложение test и файл qt.conf. Всё! Ни паки lib, ни plugin
перенёс всё на таргет. запускаю скриптом

./test.sh

/opt/argo/bin/test: error while loading shared libraries: libQt5Widgets.so.5: cannot open shared object file: No such file or directory

ну кагбэ неудевительно, что не может найти libQt5Widgets.so.5. Удевительно, что cqtdeployer не подтянул ни библиотеки, ни плагиины

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз
OI
  • Ora Iro
  • Жел. 24, 2024, 6:38 Т.Ж.

C++ - Тест 001. Первая программа и типы данных

  • Нәтиже:40ұпай,
  • Бағалау ұпайлары-8
AD

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:50ұпай,
  • Бағалау ұпайлары-4
m
  • molni99
  • Қаз. 26, 2024, 1:37 Т.Ж.

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:80ұпай,
  • Бағалау ұпайлары4
Соңғы пікірлер
ИМ
Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZEҚаз. 19, 2024, 8:19 Т.Ж.
Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas5Шілде 5, 2024, 11:02 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Енді форумда талқылаңыз
Evgenii Legotckoi
Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
t
tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
NSProject
NSProjectМаусым 4, 2022, 3:49 Т.Ж.
Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
9
9AnonimҚаз. 25, 2024, 9:10 Т.Ж.
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

Бізді әлеуметтік желілерде бақылаңыз