Andrei Yankovich
Andrei Yankovich24. März 2020 09:50

Veröffentlichung des C++/Qt- und QML-Dienstprogramms zur Anwendungsbereitstellung CQtDeployer v1.4.0 (Binary Box)

Fast sechs Monate später wurde ein größeres Update des Bereitstellungsdienstprogramms CQtDeployer veröffentlicht.
Es gibt viele neue Funktionen in diesem Update, aber das Hauptaugenmerk liegt auf der Paketerstellung.


CQtDeployer 1.4.0

Korrekturen

  • Ausgabe der Hilfe an die Konsole korrigiert, jetzt wird die tatsächliche Größe der Konsole vor der Ausgabe neu berechnet, wodurch Sie den Text korrekt übertragen können.
  • Die Arbeit mit der Bereitstellung von Qt-Plugins wurde korrigiert. Jetzt extrahieren Plugins nicht alle Systemabhängigkeiten, sondern nur qt. Das Extrahieren von Systemabhängigkeiten führte dazu, dass Anwendungen aufgrund inkompatibler Plugin-Bibliotheken abstürzten.
  • Kleinere Fehlerbehebungen und Verbesserungen.

Neue Eigenschaften

  • Unterstützung für die Suche nach qmake aus der Systemumgebung hinzugefügt.
  • Möglichkeit hinzugefügt, das Repository für die weitere Paketierung zu initialisieren, ähnlich wie bei git init.
  • Unterstützung für Qt Install Framework-Pakete hinzugefügt. Jetzt können Sie die Distribution in einen Installer packen.
  • Möglichkeit hinzugefügt, die endgültige Distribution in mehrere Pakete aufzuteilen.
  • Möglichkeit hinzugefügt, die Erstellung von Paketen für die endgültige Verteilung zu vereinheitlichen.
    – Unterstützung für das Hinzufügen benutzerdefinierter Skripts zu Anwendungsstartskripten hinzugefügt.
    – Unterstützung für das Extrahieren von Systemabhängigkeiten für Windows hinzugefügt.
  • RPATH-Unterstützung für Linux hinzugefügt. Jetzt kann cqtdeployer selbstständig den erforderlichen qmake zum Bereitstellen der Anwendung ermitteln.
    – Unterstützung für die Suche nach der erforderlichen Abhängigkeit nach Bibliotheksnamen hinzugefügt.
    – Unterstützung für Qt-Bibliotheken aus Linux-Distributions-Repositories hinzugefügt.
    – Neuer Run-Befehlsalias (cqt und cqtdeployer.cqt) für schnelle Anwendungsbereitstellung hinzugefügt.
  • Unterstützung nativer Befehlsnamen für Windows hinzugefügt. Sie können jetzt cqtdeployer über den Befehl cqtdeployer in cmd und Powershell ausführen.

Neue Optionen

  • init - initialisiert die Datei cqtdeployer.json (Konfigurationsdatei). Beispiel: „cqtdeployer init“ – um die Basispaketkonfiguration zu initialisieren. "cqtdeployer -init multi" - um die Konfiguration mehrerer Pakete zu initialisieren.
  • noCheckRPATH - deaktiviert die automatische Suche nach qmake-Pfad in ausführbaren Dateien (nur Linux).
  • noCheckPATH - deaktiviert die automatische Suche nach Pfaden zu qmake in der Systemumgebung.
  • ExtractPlugins - extrahiert zwangsweise alle Plugin-Abhängigkeiten.
    -qif – Erstellt am Ende der Bereitstellung ein Installationsprogramm.
  • extraLibs - fügt eine Vorlage für eine zusätzliche Bibliothek hinzu, die in die Distribution aufgenommen werden soll.
  • customScript - fügt dem Startskript der Anwendung ein benutzerdefiniertes Skript hinzu.
    --targetPackage [Paket; tar1, Paket; tar2] - wird verwendet, um Pakete zu bilden, bezeichnet Listen von Zieldateien für bestimmte Pakete.
  • recOut – Gibt an, in welchem Ordner Ressourcen nach der Bereitstellung hinzugefügt werden.
  • name - gibt den Namen des Pakets an.
  • Beschreibung - legt die Beschreibung des Pakets fest
  • deployVersion - legt die Paketversion fest
  • releaseDate - legt das Veröffentlichungsdatum des Pakets fest.
  • Symbol - setzt das Paketsymbol.
  • Herausgeber - legt den Herausgeber des Pakets fest.
  • qifStyle - Gibt den Pfad zur CSS-Stildatei an oder legt den Standardstil fest. Verfügbare Stile: Quasar
  • qifBanner - Legt den Pfad zur PNG-Datei des Banners fest.
  • qifLogo - Legt den Pfad zur PNG-Datei des Logos fest.

Download links

Installateur:

Der Installer kann von der sozialen Seite github heruntergeladen werden.

Snap

Im Snap Store erhältlich

Aufmerksamkeit

Stellen Sie in der Snap-Version sicher, dass Sie dem Programm Lesezugriff auf andere Prozesse gewähren. Da dies notwendig ist, um das Installationsprogramm zu erstellen und korrekt nach qt zu suchen.

Detaillierte Analyse der interessantesten Änderungen.

Als erstes ist anzumerken, dass CQtDeployer gelernt hat, mit RPATH (nur Linux) und PATH zu arbeiten. Das bedeutet, wenn Ihre Anwendung mit RPATH-Unterstützung erstellt wurde (und RPATH von qt standardmäßig aktiviert ist) oder wenn sich Ihr qmake im PATH befindet, müssen Sie den Pfad zu qmake nicht angeben. CQtDeployer findet qmake von selbst.

Lassen Sie uns in der Praxis überprüfen.
Ich habe eine einfache Konsolenanwendung mit Qt erstellt.

#include <QString>
#include <QDebug>
int main(int, char *[])
{
    QString str = "hello CQtDeployer 1.4";
    qInfo() << str;
    return 0;
}

Ich werde das cmake-Build-System verwenden, da es aktueller ist als qmake.

andrei@HP:~/Hello$ tree 
.
├── CMakeLists.txt
├── CMakeLists.txt.user
└── main.cpp

0 directories, 3 files

Erstellen Sie einen Build-Ordner.

andrei@HP:~/Hello$ mkdir build 

Führen Sie cmake im erstellten Ordner aus.

andrei@HP:~/Hello/build$ cmake .. -DCMAKE_PREFIX_PATH=~/Qt/5.14.1/gcc_64
-- Configuring done
-- Generating done
-- Build files have been written to: /home/andrei/Hello/build

Projekterstellung

andrei@HP:~/Hello/build$ make 
Scanning dependencies of target Hello_autogen
[ 25%] Automatic MOC and UIC for target Hello
[ 25%] Built target Hello_autogen
Scanning dependencies of target Hello
[ 50%] Building CXX object CMakeFiles/Hello.dir/Hello_autogen/mocs_compilation.cpp.o
[ 75%] Building CXX object CMakeFiles/Hello.dir/main.cpp.o
[100%] Linking CXX executable Hello
[100%] Built target Hello

Wir prüfen unser Programm.

andrei@HP:~/Hello/build$ ls
CMakeCache.txt  CMakeFiles  cmake_install.cmake  Hello  Hello_autogen  Makefile

Und wir führen cqtdeployer aus, indem wir sein Programm ohne qmake umgehen.

andrei@HP:~/Hello/build$ cqtdeployer -bin Hello 
Deploy ...
flag targetDir not  used. use default target dir : "/home/andrei/Hello/build/DistributionKit"
target deploy started!!
copy : "/home/andrei/Hello/build/Hello"
extract lib : "/home/andrei/Hello/build/DistributionKit//bin//Hello"
copy : "/home/andrei/Qt/5.14.1/gcc_64/lib/libQt5Core.so.5"
copy : "/home/andrei/Qt/5.14.1/gcc_64/lib/libicuuc.so.56"
copy : "/home/andrei/Qt/5.14.1/gcc_64/lib/libicui18n.so.56"
copy : "/home/andrei/Qt/5.14.1/gcc_64/lib/libicudata.so.56"
copy : "/home/andrei/Qt/5.14.1/gcc_64/translations/qtbase_ar.qm"
copy : "/home/andrei/Qt/5.14.1/gcc_64/translations/qtbase_bg.qm"
copy : "/home/andrei/Qt/5.14.1/gcc_64/translations/qtbase_ca.qm"
copy : "/home/andrei/Qt/5.14.1/gcc_64/translations/qtbase_cs.qm"
copy : "/home/andrei/Qt/5.14.1/gcc_64/translations/qtbase_da.qm"
copy : "/home/andrei/Qt/5.14.1/gcc_64/translations/qtbase_de.qm"
copy : "/home/andrei/Qt/5.14.1/gcc_64/translations/qtbase_en.qm"
copy : "/home/andrei/Qt/5.14.1/gcc_64/translations/qtbase_es.qm"
copy : "/home/andrei/Qt/5.14.1/gcc_64/translations/qtbase_fi.qm"
copy : "/home/andrei/Qt/5.14.1/gcc_64/translations/qtbase_fr.qm"
copy : "/home/andrei/Qt/5.14.1/gcc_64/translations/qtbase_gd.qm"
copy : "/home/andrei/Qt/5.14.1/gcc_64/translations/qtbase_he.qm"
copy : "/home/andrei/Qt/5.14.1/gcc_64/translations/qtbase_hu.qm"
copy : "/home/andrei/Qt/5.14.1/gcc_64/translations/qtbase_it.qm"
copy : "/home/andrei/Qt/5.14.1/gcc_64/translations/qtbase_ja.qm"
copy : "/home/andrei/Qt/5.14.1/gcc_64/translations/qtbase_ko.qm"
copy : "/home/andrei/Qt/5.14.1/gcc_64/translations/qtbase_lv.qm"
copy : "/home/andrei/Qt/5.14.1/gcc_64/translations/qtbase_pl.qm"
copy : "/home/andrei/Qt/5.14.1/gcc_64/translations/qtbase_ru.qm"
copy : "/home/andrei/Qt/5.14.1/gcc_64/translations/qtbase_sk.qm"
copy : "/home/andrei/Qt/5.14.1/gcc_64/translations/qtbase_uk.qm"
copy : "/home/andrei/Qt/5.14.1/gcc_64/translations/qtbase_zh_TW.qm"
try deploy msvc
deploy done!

Oh Wunder, jetzt ist unsere Anwendung komplett offline.
Prüfen Sie.

andrei@HP:~/Hello/build$ cd DistributionKit/
andrei@HP:~/Hello/build/DistributionKit$ tree 
.
├── bin
│   ├── Hello
│   └── qt.conf
├── Hello.sh
├── lib
│   ├── libicudata.so.56
│   ├── libicui18n.so.56
│   ├── libicuuc.so.56
│   └── libQt5Core.so.5
└── translations
    ├── qtbase_ar.qm
    ├── qtbase_bg.qm
    ├── qtbase_ca.qm
    ├── qtbase_cs.qm
    ├── qtbase_da.qm
    ├── qtbase_de.qm
    ├── qtbase_en.qm
    ├── qtbase_es.qm
    ├── qtbase_fi.qm
    ├── qtbase_fr.qm
    ├── qtbase_gd.qm
    ├── qtbase_he.qm
    ├── qtbase_hu.qm
    ├── qtbase_it.qm
    ├── qtbase_ja.qm
    ├── qtbase_ko.qm
    ├── qtbase_lv.qm
    ├── qtbase_pl.qm
    ├── qtbase_ru.qm
    ├── qtbase_sk.qm
    ├── qtbase_uk.qm
    └── qtbase_zh_TW.qm

3 directories, 29 files
andrei@HP:~/Hello/build/DistributionKit$ 

Programmwurzel:

Bild

Bibliotheken, die für das Funktionieren des Programms erforderlich sind:

Bild

Wie Sie dem Beispiel entnehmen können, ist die Anwendung vollständig zusammengestellt.

Qt-Installer-Framework

Die zweite wissenswerte Neuerung ist die Fähigkeit, QIF-Installer sofort zu generieren. Für unser Beispiel müssen Sie lediglich die Option qif zum Packbefehl hinzufügen.

Anwendungsbeispiel.

andrei@HP:~/Hello/build$ cqtdeployer -bin Hello qif 

Nur ein einfacher Befehl und das Programm wird vorzeigbar.

Bild

Dieses Installationsprogramm unterstützt die minimale Integration von Linux- und Windows-Distributionen. Nämlich: Erstellen von Verknüpfungen und Registrieren der Anwendung im Betriebssystem.
Wenn Ihnen das Aussehen dieses Installers aus irgendeinem Grund nicht gefällt, können Sie es mit dem qifStyle-Flag ändern. Ab Version 1.4 unterstützt cqtdeployer nur noch 2 Stile (native und quasar).

Beispiel Quasar-Stil:

Bild

Sie können auch Ihr eigenes qss-Stylesheet verwenden. Übergeben Sie dazu anstelle des Stilnamens den Pfad zu Ihrer qss- oder CSS-Datei.
Betrachten Sie beispielsweise das folgende qss-Stylesheet.

Style.qss:

QWidget
{
    color: white;
    background-color: rgb(65, 65, 65);
}

QPushButton
{
    background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgba(150, 150, 150, 60%), stop:1 rgba(50, 50, 50, 60%));
    border-color: rgb(60, 60, 60);
    border-style: solid;
    border-width: 2px;
    border-radius: 9px;
    min-height: 20px;
    max-height: 20px;
    min-width: 60px;
    max-width: 60px;
    padding-left: 15px;
    padding-right: 15px;
}

QPushButton:pressed, QPushButton:checked
{
    background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 rgba(50, 50, 50, 60%), stop:1 rgba(150, 150, 150, 60%));
}

Lassen Sie uns überprüfen, was wir in diesem Fall bekommen.

cqtdeployer -bin Hello qif -qifStyle ./../style.qss

Bild

Hier ist tatsächlich das dunkle Thema des Installers.

Verpackung

Und wahrscheinlich ist das letzte wichtige Update, über das es sich zu wissen lohnt, die Möglichkeit, ein großes multibinäres Projekt in Unterprojekte aufzuteilen.

Diese Funktion ist die komplexeste aller aufgelisteten, da sie viel Text erfordert. Daher empfehle ich die Verwendung einer Konfigurationsdatei.

Lassen Sie uns zunächst unser Projekt verkomplizieren, indem wir ihm zwei weitere ausführbare Dateien hinzufügen. Ich habe mich nicht darum gekümmert und nur 2 Kopien meines Hello-Dienstprogramms erstellt.

Um die Arbeit mit Paketen zu erleichtern, müssen Sie das Verzeichnis initialisieren.

cqtdeployer init

Dies ist eine weitere neue Funktion, die eine CQtDeployer.json-Datei erstellt, in die wir unsere Konfigurationen schreiben, anstatt Parameter an das Dienstprogramm zu übergeben.

{
    "binDir": ".",
    "clear": true,
    "libDir": "./",
    "recursiveDepth": 5
}

Jetzt machen wir 2 Pakete aus 3 unserer Programme. Geben Sie dazu Folgendes an:

{
    "binDir": ".",
    "clear": true,
    "libDir": "./",
    "recursiveDepth": 5,
    "targetPackage": [
        ["Dstro1", "Hello1"],
        ["Dstro2", "Hello2"],
        ["Dstro2", "Hello3"]
    ]
}

Beachten Sie, dass ich Dstro2 explizit an Hello2 Hello3 binden musste. Leider konnte cqtdeployer in Version 1.4 Ziel-Enumerationen nicht analysieren. Bitte beachten Sie, dass, wenn ich Hello1 anstelle von Hello schreibe, die Auswahl für alle Übereinstimmungen erfolgt und alle 3 Programme ausgewählt werden.
Mal sehen, was passiert ist.

cqtdeployer

.
├── Dstro1
│   ├── bin
│   │   ├── Hello1
│   │   └── qt.conf
│   ├── Hello1.sh
│   ├── lib
│   │   ├── libicudata.so.56
│   │   ├── libicui18n.so.56
│   │   ├── libicuuc.so.56
│   │   └── libQt5Core.so.5
│   └── translations
│       ├── qtbase_ar.qm
│       ├── qtbase_bg.qm
│       ├── qtbase_ca.qm
│       ├── qtbase_cs.qm
│       ├── qtbase_da.qm
│       ├── qtbase_de.qm
│       ├── qtbase_en.qm
│       ├── qtbase_es.qm
│       ├── qtbase_fi.qm
│       ├── qtbase_fr.qm
│       ├── qtbase_gd.qm
│       ├── qtbase_he.qm
│       ├── qtbase_hu.qm
│       ├── qtbase_it.qm
│       ├── qtbase_ja.qm
│       ├── qtbase_ko.qm
│       ├── qtbase_lv.qm
│       ├── qtbase_pl.qm
│       ├── qtbase_ru.qm
│       ├── qtbase_sk.qm
│       ├── qtbase_uk.qm
│       └── qtbase_zh_TW.qm
└── Dstro2
    ├── bin
    │   ├── Hello2
    │   ├── Hello3
    │   └── qt.conf
    ├── Hello2.sh
    ├── Hello3.sh
    ├── lib
    │   ├── libicudata.so.56
    │   ├── libicui18n.so.56
    │   ├── libicuuc.so.56
    │   └── libQt5Core.so.5
    └── translations
        ├── qtbase_ar.qm
        ├── qtbase_bg.qm
        ├── qtbase_ca.qm
        ├── qtbase_cs.qm
        ├── qtbase_da.qm
        ├── qtbase_de.qm
        ├── qtbase_en.qm
        ├── qtbase_es.qm
        ├── qtbase_fi.qm
        ├── qtbase_fr.qm
        ├── qtbase_gd.qm
        ├── qtbase_he.qm
        ├── qtbase_hu.qm
        ├── qtbase_it.qm
        ├── qtbase_ja.qm
        ├── qtbase_ko.qm
        ├── qtbase_lv.qm
        ├── qtbase_pl.qm
        ├── qtbase_ru.qm
        ├── qtbase_sk.qm
        ├── qtbase_uk.qm
        └── qtbase_zh_TW.qm

8 directories, 60 files

Wie Sie dem Ergebnisbaum entnehmen können, haben wir 2 Verteilungen erhalten.
1. Dstro1 – enthält die Hello1-Anwendung
2. Dstro2 - enthält die restlichen 2.

Lassen Sie uns nun prüfen, was passiert, wenn dies alles mit einem Installationsprogramm gepackt ist. Fügen Sie den qif-Parameter in CQtDeployer.json zu true hinzu: qif: true, .

{
    "binDir": ".",
    "clear": true,
    "qif": true,
    "libDir": "./",
    "recursiveDepth": 5,
    "targetPackage": [
        ["Dstro1", "Hello1"],
        ["Dstro2", "Hello2"],
        ["Dstro2", "Hello3"]
    ]

Bild

Wie Sie auf dem Screenshot sehen können, haben wir jetzt 2 Pakete zur Installation.

Neue Aliase

Und die letzte kleine, aber feine Ergänzung: cqtdeployer wurde jetzt um neue Befehle erweitert.

  • qt ist eine schnelle Möglichkeit, Ihre Anwendung bereitzustellen. Dies vereinfacht den Bereitstellungsaufruf.
  • Beispiel:
    cqt myApp ist dasselbe wie cqtdeployer -bin myApp .

  • cqtdeployer.cqt - wie cqt, aber für das Snap-Paket.

  • In der Windows-Version müssen Sie das %-Zeichen nicht mehr hinzufügen, um das Dienstprogramm aufzurufen.

  • In der Windows-Version ist es nicht mehr erforderlich, das %-Zeichen hinzuzufügen, um das Dienstprogramm aufzurufen.
    Jetzt sieht der Aufruf wie unter Linux aus. (cqtdeployer)

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

o
  • 24. März 2020 14:51

спасибо, за обзор!

Andrei Yankovich
  • 24. März 2020 15:29

Если будут вопросы, пишите. Найдем решение)

Ruslan Polupan
  • 26. März 2020 07:47

Супер. Спасибо!

D
  • 26. März 2020 08:50

Добрый день. У меня есть приложение с библиотеками собранными отдельно. Как мне сделать так, чтобы эти библиотеки помещались в установщик и при установке приложение были вместе с исполняемым файлом? И почему утилита при использовании -bin или -bindir создает ярылки для каких-то библиотек, но не для исполняемого файла? Я использую Windows.

Andrei Yankovich
  • 26. März 2020 09:27
  • (bearbeitet)
  1. Откройте cmd, перейдите в папку с вашими проектами, запустите cqtdeployer init.
  2. Должен появится файл CQtDeployer.json, откройте его.
{
    "bin": [
        "./path/to/my/file.exe",
    ],
    "qmake": "C:/path/to/my/qmake.exe",
    "clear": true,
    "libDir": "./",
    "recursiveDepth": 5,
    "qif": true
}

Если все ваши библиотеки требуются для работы ./path/to/my/file.exe т они автоматически попадут в инсталятор. если ваши библиотеки очень далеко запрятаны от расположения json файла то можете по больше выставить значение "recursiveDepth": 5,
путь "./path/to/my/file.exe", должен обязательно начинается с "." и быть относительным от json файла.

Обратите внимание на то что в Windows версии все еще нужно явно указывать путь к qmake которым был собран проект.
Исключение составляет тот факт что если qmake уже прописан у вас в окружении PATH, тогда cqtdeployer будет использовать значение из PATH.
затем сохраняете ваш файл и повторно запускаете cqtdeployer.

что касается ярлыков на библиотеки то звучит как ошибка. Собирите максимум информации о ваших дествиях и опишите ошибку на GitHub

Andrei Yankovich
  • 26. März 2020 10:29

можно еще так:

cqtdeployer -bin "path/to/my/file.exe" -qmake "C:/path/to/my/qmake.exe" -libDir "./" -recursiveDepth 5 qif

это тоже самое, просто гораздо удобнее когда инициализация будет у вас записана в файл, и вам не придется постоянно водить эту длинную строку для развертывания.

D
  • 26. März 2020 11:56

LibDir вообще не видит библиотеки. Пробовал разные попытки записи, исходя из вашего сообщения. Библиотеки лежат рядом с исполняемым файлом, json там же. Если использовать binDir вместо bin тогда библиотеки добавляются. А при установке создадутся ярлыки на все библиотеки, но не на исполняемый файл. Оно так и должно работать?

Andrei Yankovich
  • 26. März 2020 12:39
  • (bearbeitet)

нет, так не должно быть, вы уверены что ваш исполняемый файл зависит от ваших библиотек ? или он подключает их как плагины?
а с ярлыками это точно ошибка, уже завел задачу на это .

Andrei Yankovich
  • 26. März 2020 12:42

@Den125 можно взгялнуть на ваш проект ?

D
  • 26. März 2020 12:51

Мой исполняемый файл не зависит от библиотек. Библиотеки подключаются при необходимости в процессе работы программы.

Andrei Yankovich
  • 26. März 2020 13:13
  • (bearbeitet)

тогда это плагины )
для них есть отделный флаг extraPlugin

{
    "bin": [
        "./path/to/my/file.exe",
    ],
    "qmake": "C:/path/to/my/qmake.exe",
    "extraPlugin": [
        "./plugin1.dll",
        "./plugin2.dll",
    ],
    "clear": true,
    "libDir": "./",
    "recursiveDepth": 5,
    "qif": true
}
D
  • 26. März 2020 13:34

Это сработало, но библиотеки при установке находятся в папке plugins. А можно их вынести к исполняемому файлу? Можно ли в установщик закинуть файл не библиотеку и не исполняемый, например *.jar?

Andrei Yankovich
  • 26. März 2020 13:37

тогда переместите ваши библиотеки из extraPlugin в bin

{
    "bin": [
        "./path/to/my/file.exe",
        "./plugin1.dll",
        "./plugin2.dll",
    ],
    "qmake": "C:/path/to/my/qmake.exe",
    "clear": true,
    "libDir": "./",
    "recursiveDepth": 5,
    "qif": true
}
Andrei Yankovich
  • 26. März 2020 13:37

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

Andrei Yankovich
  • 27. März 2020 02:47

Ошибка с ярлыками в Windows исправлена в версиии 1.4.0.4

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
A
ALO1ZE19. Oktober 2024 08:19
Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken