Wie erstelle ich Barcodes in der Qt QML-Anwendung?

Qt QML-Entwicklung
2021-02-24
13 Minuten
Barcode in Qt/QML-Anwendung generieren

Heutzutage können wir überall, wo wir hinschauen, diese kleinen, einfachen und nützlichen schwarz-weißen Rechtecke sehen, egal ob in einem echten Geschäft oder auf einer Webseite. Barcodes und QR-Codes sind allgegenwärtig und ihre Nützlichkeit hat sich im Laufe der Jahre bewährt.

Aus diesem Grund haben wir uns entschieden, einen benutzerdefinierten Wrapper für die Qt QML-Barcodegenerierung zu erstellen.

In diesem Beitrag zeigen wir, wie einfach es ist, einen Barcode zu generieren und anzuzeigen und was hinter den Kulissen in unserem Code passiert.

Wenn Sie Hilfe bei Softwareentwicklungsdiensten benötigen, empfehlen wir Ihnen, unsere Seite Mobile Entwicklungsdienste zu besuchen.

 

Zunächst einmal: Was ist ein Barcode?

Ein Barcode ist eine Art visuelle Darstellung von Daten, die normalerweise auf Produkte oder andere Gegenstände gedruckt ist. Er besteht aus einer Reihe dünner und dicker vertikaler Linien, die verschiedene Zeichen kodieren. Barcodes sind eine Art maschinenlesbarer Code, mit dem Produkte schnell identifiziert und verfolgt werden können.

Sie bieten schnellen Zugriff auf Informationen über ein Objekt, wie etwa Preis, Marke, Verfallsdatum usw. Der heute am häufigsten verwendete Barcode ist der Universal Product Code (UPC), der auf fast allen Konsumprodukten in den Vereinigten Staaten zu finden ist. Barcodes werden auch für andere Zwecke verwendet, etwa zur Sendungsverfolgung, Bestandsverwaltung und Anlagenkennzeichnung.

SCodes – Barcode- und QR-Code-Generierung

Um also einen Barcode scannen oder lesen zu können (lesen Sie unseren vorherigen Blogbeitrag zum Thema Barcodes in Qt QML-Anwendung scannen), müssen Sie zunächst einen generieren.

Mithilfe der fantastischen Barcode-Bildverarbeitungsbibliothek ZXing (Zebra Crossing) (in diesem Fall meinen wir die Portierung auf C++) und des Qt-Frameworks.

Wir bei Scythe Studio haben eine benutzerfreundliche Bibliothek namens SCodes erstellt, mit der Barcodes generiert und gescannt werden können. Sie kann mit QML gekoppelt werden, damit wir unser Ergebnis auf einfache Weise anzeigen können, unabhängig davon, auf welcher Plattform wir uns befinden.

Hier ist eine kleine Demo unserer App, die Sie auf unserem GitHub ausprobieren können:

 

 

Verwendung der ZXing C++-Bibliothek in SCodes

Die ZXing-C++-Bibliothek hilft uns bei Barcodes auf niedrigerer Ebene. Sie unterstützt das Lesen und Generieren vieler Codeformate, aber hier konzentrieren wir uns auf den eindimensionalen Code 128 und den zweidimensionalen QR-Code und die Data Matrix.

Der Unterschied zwischen ihnen in unserer Anwendung ist einfach die Formateigenschaft, da ZXing sich um die gesamte Konvertierung von Zeichenfolgen in Bilder kümmert.

 

Die Bibliothek bietet eine sehr einfache API:

  • Die Klasse ZXing::MultiFormatWriter verwendet ein Barcodeformat als Konstruktorargument und lässt uns Kodierung, Rand und ECC-Level (Fehlerkorrekturcodelevel) festlegen.

  • Wir rufen eine encode()-Methode der oben genannten Klasse mit unserem Textinhalt und der Ausgabebildgröße als Argumente auf.

  • Sie gibt BitMatrix zurück, wobei echte schwarze Pixel und falsche weiße Pixel des binären Barcodebilds vorhanden sind.

Nachdem wir die Bitmap erhalten haben, können wir sie beliebig zu einem Bild verarbeiten. Das ist alles, was dazu zu sagen ist.

 

Die Barcode-Generierung

Schauen wir uns den Code und seine Umsetzung an.

Zuerst initialisieren wir die Klasse MultiFormatWriter mit den gewünschten Optionen.

 

int margin = 1;
int eccLevel = 1;
ZXing::BarcodeFormat format = ZXing::BarcodeFormat::CODE_128;
ZXing::MultiFormatWriter writer = ZXing::MultiFormatWriter(format).setMargin(margin).setEccLevel(eccLevel);

Über den ersten Schritt hinaus. Nachdem wir nun einen Writer eingerichtet haben, ist es an der Zeit, eine encode()-Methode aufzurufen, um ein Bitmap zu erhalten, mit dem wir später arbeiten können.

 

ZXing::Matrix<uint8_t> bitmap;
bitmap = ZXing::ToMatrix<uint8_t>(writer.encode(ZXing::TextUtfEncoding::FromUtf8(“text”), 500, 500));

Unser Bitmap ist fertig, also speichern wir es als PNG-Bild. Dazu verwenden wir einen Teil der stb-Bibliothek, die mit ZXing geliefert wird.

 

std::string filepath = “barcode.png”;
stbi_write_png(filepath.c_str(), bitmap.width(), bitmap.height(), 1, bitmap.data(), 0);

Und fertig! Wir haben unser Barcodebild.

 

Code-Einblicke – Qt/QML

Um zwischen C++ und QML interagieren zu können, benötigen wir zunächst eine richtige Klasse. Sie muss Eigenschaften des Ausgabebilds enthalten, die als Q_PROPERTY angezeigt werden, und eine ganze Klasse, die QML angezeigt wird, was mit QML_ELEMENT erfolgt (verfügbar seit Qt 5.15.0).

 

class SBarcodeGenerator: public QQuickItem {

  Q_OBJECT

  Q_PROPERTY(int width MEMBER _width NOTIFY widthChanged)
  Q_PROPERTY(int height MEMBER _height NOTIFY heightChanged)
  Q_PROPERTY(int margin MEMBER _margin NOTIFY marginChanged)
  Q_PROPERTY(int eccLevel MEMBER _eccLevel NOTIFY eccLevelChanged)
  Q_PROPERTY(QString fileName MEMBER _fileName NOTIFY fileNameChanged)
  Q_PROPERTY(ZXing::BarcodeFormat format MEMBER _format)
  Q_PROPERTY(QString extension MEMBER _extension)
  Q_PROPERTY(QString filePath MEMBER _filePath)
  Q_PROPERTY(QString inputText MEMBER _inputText)

  #if(QT_VERSION >= QT_VERSION_CHECK(5, 15, 0))
  QML_ELEMENT
  #endif

  …

  public slots: 
    bool process(const QString & inputString);
  …

  signals: 
    void processFinished();

  ...

  private: 
  int _width = 500;
  int _height = 500;
  int _margin = 10;
  int _eccLevel = -1;
  ZXing::BarcodeFormat _format = ZXing::BarcodeFormat::QR_CODE;
  QString _extension = "png";
  QString _fileName = "barcode";
  QString _filePath = "";
  QString _inputText = "";
  ZXing::Matrix < uint8_t > _bitmap = ZXing::Matrix < uint8_t > ();
}

Dies sind die Codeausschnitte unseres Wrappers zu Anzeigezwecken. Wenn Sie den gesamten Wrapper ansehen möchten, gehen Sie zum SCodes-Repository.

Nun zur Prozessfunktion: Es handelt sich fast um denselben Code wie bei der Initialisierung von MultiFormatWriter.

Zusätzlich erstellen wir auch Pfad und Dateinamen und speichern unser Bild, abhängig von der Erweiterung. Nachdem alles erledigt ist, senden wir ein Signal processFinished() aus, damit QML seine Arbeit erledigen kann.

 

bool SBarcodeGenerator::process(const QString & inputString) {
  if (inputString.isEmpty()) {
    return false;
  }
  else {
    ZXing::MultiFormatWriter writer = ZXing::MultiFormatWriter(_format).setMargin(_margin).setEccLevel(_eccLevel);
    _bitmap = ZXing::ToMatrix < uint8_t > (writer.encode(ZXing::TextUtfEncoding::FromUtf8(inputString.toStdString()), _width, _height));
    _filePath = QDir::tempPath() + "/" + _fileName + "." + _extension;

    if (_extension == "png") {
      stbi_write_png(_filePath.toStdString().c_str(), _bitmap.width(), _bitmap.height(), 1, _bitmap.data(), 0);
    }
    else if (_extension == "jpg" || _extension == "jpeg") {
      stbi_write_jpg(_filePath.toStdString().c_str(), _bitmap.width(), _bitmap.height(), 1, _bitmap.data(), 0);
    }

    emit processFinished();
    return true;
  }
}

Jetzt beginnen wir im QML-Teil mit der Erstellung des SBarcodeGenerator-Objekts, damit wir mit der C++-Klasse interagieren können.

Wenn wir auf die Schaltfläche klicken, beginnt der BarcodeGenerator mit der Verarbeitung unseres Strings (in diesem Fall ist es ein einfacher „Text“).

Wenn er fertig ist, wird ein Signal gesendet und unser überschriebener Standardsignalhandler ändert die Containerquelle des Bilds in das generierte Bild und zeigt es an.

 

ApplicationWindow {
id: root
visible: true  
width: 500  
height: 500

SBarcodeGenerator {
    id: barcodeGenerator
    onProcessFinished: {
        image.source = "file:///" + barcodeGenerator.filePath
    }
}

Button {
    id: generateButton
    onClicked: {
        image.source = ""
        barcodeGenerator.process(qStr(“test”))
    }
}

Image {
    id: image
    anchors: parent
    width: parent.width 
    height: image.width
}
}

Einfacher geht es nicht. Wirklich. Natürlich handelt es sich hier nur um Snippets und wir haben einige triviale Teile des Codes übersprungen. Wenn Sie also eine vollständige und komplexere Anwendung sehen möchten, sehen Sie sich unsere Bibliothek SCodes mit 2 Demos zum Scannen und Generieren von Barcodes an.

 

Zahlen auf einem Barcode

Die Zahlen auf einem Barcode sind für das Produkt, das Sie kaufen, eindeutig. Ein Standard-UPC-A-Barcode enthält 12 Ziffern, von denen jede eine bestimmte Bedeutung hat. Die erste Ziffer wird als Systemkennung verwendet, um den Produkttyp zu klassifizieren.

Zum Beispiel sind 0, 1, 6, 7 und 8 für standardmäßige Universal Product Codes reserviert; 2 identifiziert gewichtete Artikel wie Fleisch; 3 kodiert gesundheitsbezogene Produkte; 4 steht für nicht lebensmittelbezogene Artikel; und 5 und 9 identifizieren Coupons.

Unmittelbar nach dieser ersten Ziffer folgen zwei Datensätze mit jeweils fünf Ziffern, die für die Herstellernummer bzw. die Produktkennung stehen. Die letzte Ziffer ist ein Kontrollcode, mit dem Scans Fehler erkennen können.

 

Was ist ein Standard-Barcodetyp?

Barcodes haben kein Standardformat, besitzen jedoch bestimmte Eigenschaften, je nachdem, wie sie erstellt werden. Variationen umfassen Größe, Kapazität, verwendete Materialien, Linearität und die Notwendigkeit einer Prüfsumme.

Die Größe eines Barcodes korreliert normalerweise mit dem Scangerät und seiner Anwendung, während die Kapazität die von seinem jeweiligen Zeichensatz unterstützten Zeichenkombinationen angibt.

Darüber hinaus zeigt die Breite des schmalsten Strichs die Dichte an. In Bezug auf die Linearität wird diese durch den gescannten Bereich bestimmt – an dieser Stelle wird auch eine Prüfsumme eingefügt, die die Genauigkeit durch Berechnungen der Scanner verbessert, wenn die richtigen Informationen abgerufen werden.

Wenn Sie sich dieser verschiedenen Faktoren bewusst sind, können Sie den erforderlichen Barcodetyp für Ihren Anwendungsfall identifizieren.

 

Welcher Barcodetyp ist am häufigsten?

UPC (Universal Product Codes) ist einer der beliebtesten Barcodetypen, der zur Kennzeichnung von Einzelhandelsprodukten verwendet wird. Er ist auf fast jedem Verkaufsartikel auf dem Markt und in allen Lebensmittelgeschäften in den USA zu finden und besteht aus einer 12-stelligen rein numerischen Nummer.

GS1 weist jedem Produkt eine eindeutige Nummer zu, die die ersten sechs Ziffern des Barcodes ausmacht, während der Hersteller die nächsten fünf Ziffern zuweist. Jedes Produkt hat seinen eigenen UPC-Code, der zur Identifizierung verwendet wird.

Diese Codes helfen beim digitalen Scannen und Verfolgen von Produkten, und eine Verwaltungssoftware kann verwendet werden, um diese Barcodes zu scannen und Post und Pakete zu lokalisieren. So können Benutzer leicht verfolgen, wo sich ihre Artikel befinden und wann sie sie erhalten. Neben UPC-Codes gibt es noch andere häufig verwendete Barcodetypen:

  • Code 39 ermöglicht die Verwendung von Zahlen und Buchstaben, wobei bis zu 43 davon kodiert werden können. Er ist am häufigsten in Automobilfabriken und im US-Verteidigungsministerium zu finden.

  • Code128 wurde erst vor kurzem entwickelt und von 39 Zeichen auf alle ASCII-128-Zeichensätze erweitert, einschließlich Buchstaben und Aussprachezeichen – eine nützliche Funktion zum Speichern einer Vielzahl von Datentypen.

  • GS1-128 wurde für einen einfacheren Datentransfer zwischen Unternehmen entwickelt und verwendet vorgegebene Anwendungskennungen, um Informationen zu kodieren und ihre Bedeutung zu definieren.

  • Codabar ist effizient beim Drucken, da es ohne Computer erstellt werden kann, indem einfach Zahlen hintereinander verwendet werden. Es ist auch selbstüberprüfend, d. h. wenn falsche Informationen gescannt werden, wird dies stattdessen als Fehler registriert.

  • EAN-13 und EAN-8 werden außerhalb Amerikas normalerweise auf Konsumgütern (z. B. Lebensmitteln) verwendet, da sie an der Verkaufsstelle mit Etiketten gescannt werden, die sich in der Ziffernkapazität unterscheiden (13 bzw. 8).

  • ITF-14 schließlich konzentriert sich auf Logistik-Barcodes, die 14 Ziffern erfordern und eine hohe Drucktoleranz selbst auf Karton bieten. Dieser Code wird hauptsächlich für Handelswaren verwendet, die keine POS-Interaktion benötigen.

 

Lineare vs. Matrix-Barcodes

Linien unterschiedlicher Breite bilden zusammen Barcodes, die bis zu 10^13 verschiedene Zahlen darstellen können. Es gibt zwei Haupttypen von Barcodes: lineare und zweidimensionale Matrix-Barcodes.

Lineare Barcodes erzeugen bestimmte Muster, üblicherweise UPC-Codes, während Matrix-Barcodes wie Quadrate oder Rechtecke mit vielen winzigen Punkten aussehen und mehr Daten pro Flächeneinheit enthalten können. Beispiele sind QR-Codes, EZcode und Nexcode.

Die Möglichkeiten zur Kodierung von Barcodes sind endlos, was bedeutet, dass die Kombinationen niemals erschöpft sein werden.

 

Unterstützte Formate

Die von Scythe Studio SCodes für diese Barcode-Generierung unterstützten 1D-Formate sind UPC-A, UPC-E, EAN-8, EAN-13, DataBar (nur Scannen), Code 39, Code 93, Code 128, Codabar und ITF (nur Generieren). Dies sind alles weit verbreitete Barcodetypen, die für unterschiedliche Zwecke verwendet werden.

Für 2D-Formate werden derzeit QR-Codes, DataMatrix, PDF417 und Aztec unterstützt. Sowohl das Scannen als auch das Generieren dieser Formate ist möglich. MaxiCode ist noch nicht verfügbar.

Das Hinzufügen neuer Formatunterstützung zu einer Qt QML Barcode-Anwendung ist immer in Arbeit, da Entwickler hart daran arbeiten, sicherzustellen, dass mehr Barcodetypen problemlos unterstützt werden können. Dies ist praktisch für Benutzer, die bestimmte Barcodetypen für ihre jeweiligen Anwendungen oder Projekte benötigen.

Insgesamt wurde das Generieren von Barcodes in einer Qt QML-Anwendung durch die Reihe unterstützter Formate vereinfacht, mit denen Benutzer verschiedene Barcodetypen in ihren Anwendungen problemlos scannen und generieren können. Da im Laufe der Zeit neue Formate verfügbar werden, werden die Benutzer zweifellos vom Komfort profitieren, den diese ihnen bei der Arbeit mit Barcodes bieten.

 

Unterschied zwischen QR-Code und Barcode

QR-Codes und Barcodes sind zwei gängige Arten computerlesbarer Codes, die zum schnellen Speichern und Teilen von Daten verwendet werden.

Der Hauptunterschied zwischen einem QR-Code und einem Barcode besteht darin, dass ersterer mehr Daten speichern kann als letzterer. Ein typischer QR-Code kann bis zu 7.089 Zeichen enthalten, während ein Standard-1D-Barcode höchstens 20 Zeichen aufnehmen kann. Daher eignen sich QR-Codes besser zum Speichern großer Informationsmengen wie Website-Links, E-Mails, Kontaktinformationen oder Bilder.

Während ein Barcode nur lineare Daten speichert (vertikale Linien mit jeweils einem Zeichen), speichert ein QR-Code zweidimensionale Daten in vertikaler und horizontaler Richtung (schwarze Quadrate, die in unterschiedlichen Winkeln angeordnet sind). Dadurch kann der Code aus jeder Richtung gescannt werden – deshalb wird er oft als „scannbare Kunst“ bezeichnet.

Ein weiterer wichtiger Unterschied zwischen einem QR-Code und einem Barcode besteht darin, dass ersterer mit nur einem Scan mehrere Arten von Datenformaten kodieren kann, darunter URLs, reine Textdokumente, Produktnummern, NFC-Tags, Binärdaten (Bilder/Audiodateien), alphanumerische Zeichenfolgen (z. B. Passwörter) usw. Barcodes sind auf numerische Ziffern beschränkt, wie ISBN-Nummern oder UPCs.

 

5 wichtige Vorteile von Barcode-Software

Der Einsatz von Barcode-Software in verschiedenen Branchen, vom Gesundheitswesen bis zum Bildungswesen, kann viele Vorteile bieten. Barcodes erleichtern die Nachverfolgung und Überprüfung von Produkten, ganz zu schweigen von der Möglichkeit, manuelle Dateneingabefehler oder Probleme durch verlegte Artikel zu vermeiden.

 

Vermeiden Sie Dateneingabefehler

Ein bemerkenswerter Vorteil der Verwendung von Barcode-Software ist die Möglichkeit, Dateneingabefehler zu vermeiden, die im Laufe der Zeit möglicherweise zu erheblichen Geschäftsausgaben führen könnten. Durch die Verwendung eines QR-Code-Scanners müssen Mitarbeiter keine Nummern manuell eingeben oder handschriftlich verfassen, was den Prozess viel schneller und effektiver macht.

 

Reduziert die Schulungszeit der Mitarbeiter

Ein weiterer Vorteil der Verwendung von Barcode-Software ist die Reduzierung der Schulungszeit der Mitarbeiter. Dank dieser Systeme dauert die Schulung nur wenige Minuten, da die Mitarbeiter nur verstehen müssen, wie der Handscanner funktioniert und was das Scannen von Barcodes beinhaltet.

Dadurch müssen die Mitarbeiter weniger Zeit mit dem Erlernen von Lagerlisten oder Preisen verbringen und haben viel mehr Zeit für die Arbeit, die eine höhere Kapitalrendite für Unternehmen ermöglicht.

 

Bestandsverwaltung

Die Verwendung von Barcodes wird immer beliebter, da Unternehmen ihre Effizienz und Genauigkeit verbessern möchten. Durch den Einsatz dieser Technologie kann der Zeitaufwand für manuelle Prozesse drastisch reduziert werden.

Barcodes bieten eine sichere Möglichkeit, Lagerbestände in Lagern zu verfolgen, sodass Mitarbeiter nicht mehr physisch suchen und Inventarnummern manuell aufschreiben müssen. Dies beschleunigt das Auffinden eines bestimmten Artikels oder Geräts erheblich.

 

Bestandsserialisierung

Darüber hinaus können Unternehmen mit Barcode-Software ihren Bestand problemlos serialisieren, indem die Software zuvor verwendete Informationen abruft. Dies gewährleistet die Genauigkeit bei der schnellen und mühelosen Verfolgung von Produkten und Geräten.

Darüber hinaus kann der Einsatz dieser Technologie unnötige Kosten sparen, da der Ersatz verlorener Artikel und Geräte vermieden wird.

 

Verbesserte Entscheidungsfindung

Barcodes ermöglichen nicht nur eine effektivere Bestandsverfolgung eines Unternehmens, sondern auch einen schnelleren Zugriff auf Daten, was zu einer besseren Entscheidungsfindung beiträgt. Dies kann zu höheren Gewinnen führen, da keine wertvolle Arbeitszeit mit der Suche nach Produktinformationen und dergleichen verschwendet werden muss.

Ein zusätzlicher Bonus ist, dass Barcode-Software sowohl erschwinglich als auch benutzerfreundlich ist und eine Reihe von Daten ohne jegliche Schwierigkeiten bereitstellt.

Zusammenfassend lässt sich sagen, dass die Nutzung der Vorteile, die die Einführung der Barcode-Technologie mit sich bringt, dazu beiträgt, dass ein Unternehmen nie mit einer Bestandskrise konfrontiert wird oder zusätzliche Kosten aufgrund fehlender Artikel oder Datenungenauigkeiten entstehen. Immer mehr Unternehmen erkennen ihren Wert, da sie dazu beiträgt, den täglichen Betrieb und letztlich auch das langfristige Funktionieren zu verbessern.

 

Fazit

Entdecken Sie, wie Qt QML-Projekte Ihnen helfen können, das Beste aus Ihrer Softwareentwicklung herauszuholen! Mit Qt können Sie schnelle, zuverlässige und reaktionsschnelle Software für mehrere Plattformen erstellen, darunter Desktop-, Android- und Webanwendungen – alles mit einer einzigen Codebasis. Genießen Sie blitzschnelle Logik und zahlreiche integrierte Module und APIs, um Benutzern das beste Erlebnis zu bieten.

Scythe Studio ist auf plattformübergreifende Entwicklung spezialisiert – überlassen Sie uns die Erstellung einfach zu verwaltender, gut dokumentierter und mühelos zu wartender Lösungen. Erhalten Sie Unterstützung bei jedem Schritt des Prozesses – von der Behebung von Problemen, der Migration auf neue Versionen und dem Testen von Code bis hin zur Bereitstellung Ihrer App mit dedizierten Installationsprogrammen. Nehmen Sie jetzt Kontakt auf und finden Sie heraus, wie wir Ihnen helfen können!

 

FAQs

Ist ein QR-Code ein 2D- oder 3D-Barcode?

Ein Quick Response (QR)-Code ist ein zweidimensionaler Barcode, der Daten in Schwarzweiß oder kontrastierenden dunklen und hellen Zellen kodiert, die in einem Raster angeordnet sind. QR-Codes sind omnidirektional, d. h. sie können aus jedem Winkel gelesen werden.

 

Welcher Algorithmus wird zum Generieren von QR-Codes verwendet?

Die Reed Solomon Correction Method ist ein Algorithmus zum Generieren von QR-Codes. Alle QR-Code-Lesegeräte haben diese standardmäßig integriert, sodass der Benutzer sogar teilweise verdeckte Codes mit einer hochwertigen Kamera scannen kann.

 

Welche Schriftart ist für den Barcode am besten geeignet?

Es gibt mehrere Schriftarten, die für die Verwendung mit Barcodes geeignet sind, z. B. Bar-Code 39, IDAutomationHC39M, AlphanumericQR usw.

 

Wie kann ich Text in einen Barcode umwandeln?

Mit dem Barcode- und QT-Code-Generator von SCodes können Sie einen Barcode-Inhalt auswählen, die Informationen eingeben, die Sie in den Barcode oder QR-Code kodieren möchten, und dann das Bild auf die Festplatte oder auf die Benutzeroberfläche übertragen.

 

Was bedeutet QR im Qt-Code?

QR steht für „Quick Response“, da diese Codes Benutzern beim Scannen sofortigen Zugriff auf Informationen ermöglichen. QR-Codes sind flexibel und können große Datenmengen speichern.

 

Scythe-Studio - Blog Redactors

Scythe Studio Blog Redactors

Brauchen Sie Qt QML-Entwicklungsdienste?

service partner

Kommen wir zur Sache: Es ist eine Herausforderung, Top-Qt-QML-Entwickler zu finden. Helfen Sie sich selbst und starten Sie die Zusammenarbeit mit Scythe Studio – echten Experten im Qt C++ Framework.

Entdecken Sie unsere Fähigkeiten!

Neueste Artikel

[ 156 ]