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 не подтянул ни библиотеки, ни плагиины

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз
Г

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

  • Нәтиже:66ұпай,
  • Бағалау ұпайлары-1
t

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

  • Нәтиже:33ұпай,
  • Бағалау ұпайлары-10
t

Qt - Тест 001. Сигналы и слоты

  • Нәтиже:52ұпай,
  • Бағалау ұпайлары-4
Соңғы пікірлер
G
GoattRockҚыр. 3, 2024, 1:50 Т.Қ.
Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
d
dblas5Шілде 5, 2024, 11:02 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssrАқп. 8, 2024, 6:43 Т.Қ.
Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Анатолий КононенкоАқп. 5, 2024, 1:50 Т.Ж.
Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Енді форумда талқылаңыз
Evgenii Legotckoi
Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
F
FynjyШілде 22, 2024, 4:15 Т.Ж.
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
BlinCT
BlinCTМаусым 25, 2024, 1 Т.Ж.
Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
BlinCT
BlinCTМамыр 5, 2024, 5:46 Т.Ж.
Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
Evgenii Legotckoi
Evgenii LegotckoiМамыр 2, 2024, 2:07 Т.Қ.
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

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