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

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз
m
  • molni99
  • Қаз. 26, 2024, 1:37 Т.Ж.

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

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

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

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

C++ - Тест 003. Условия и циклы

  • Нәтиже:42ұпай,
  • Бағалау ұпайлары-8
Соңғы пікірлер
i
innorwallҚар. 8, 2024, 8:51 Т.Ж.
Джанго - Сабақ 036. Әлеуметтік желілер арқылы аутентификацияны қалай қосуға болады. Байланыста buy priligy online usa In addition, it might not be effective at the doses recommended, because of your previous tolerance to a similar type of drug
i
innorwallҚар. 8, 2024, 7:40 Т.Ж.
Qt/C++ - 039-сабақ. QSqlTableModel жүйесінде жолды бағандағы мән бойынша бояу әдісі priligy results This slowing of eGFR decline was observed in patients with and without low eGFR and in those with and without type 2 diabetes
i
innorwallҚар. 8, 2024, 2:45 Т.Ж.
QML - Урок 002. QML Android жүйесіндегі пайдаланушы түймесі 2007; 14 2 270 83 priligy dapoxetine 60mg Testicular imaging is sort of a unique niche right now, Гў
i
innorwallҚар. 8, 2024, 1:32 Т.Ж.
C++ - #pragma бір рет құрастыруды жылдамдатады ма? It could cause harm to the unborn baby buy generic priligy
Енді форумда талқылаңыз
i
innorwallҚар. 8, 2024, 7:08 Т.Ж.
добавить qlineseries в функции School of Nursing, Long Island University, Brooklyn Campus, Brooklyn, NY, USA priligy dapoxetine 30mg
9
9AnonimҚаз. 25, 2024, 9:10 Т.Ж.
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
F
FynjyШілде 22, 2024, 4:15 Т.Ж.
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

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