forcechemtech.com

  

Beste Artikel:

  
Main / Qquickitem wie man Text zeichnet c

Qquickitem wie man Text zeichnet c

Entwickler, die intensiv mit Zeichenmethoden aus Widgets sowie mit Anpassungen und Delegaten in klassischen Widgets gearbeitet haben, werden bei der Verwendung der Malmethode nichts grundlegend Neues sehen. Dieser Ansatz ist jedoch veraltet, wird auf QML angewendet, wird im Allgemeinen nicht empfohlen und ist langsam, da das Rendern über den Prozessor und nicht über die Grafikkarte erfolgt. Ich war von meiner persönlichen Erfahrung überzeugt, wie langsam das Zeichnen eines großen Bildes im Widget sein kann.

Es wird jedoch ein neuer Ansatz mit der updatePaintNode-Methode empfohlen, der OpenGL-Tools verwendet und sich dementsprechend auf das grafische PC-System bezieht und viel produktiver als die veraltete Methode ist. Ich schlage vor, das Beispiel aus Tutorial 024 zu wiederholen, um den Unterschied im Code zu erkennen und das folgende Ergebnis zu erhalten.

Lassen Sie uns zustimmen, dass die Logik des Timers vollständig auf der letzten Lektion 024 basiert, daher werde ich mich nur auf die wichtigsten Punkte des Codes konzentrieren, nämlich wo es einen Unterschied gibt, um Merkmale im Vergleich zu den veralteten Rendering-Methoden anzuzeigen.

Um die Logik dieses Timers zu erläutern, fahren Sie bitte mit einer Lektion 024 auf der Seite fort. Daher können wir die nicht mehr benötigte Malmethode nicht mehr verwenden. Jetzt haben wir von QQuickItem geerbt, die updatePaintNode-Methode neu definiert, die für die Bildung der Grafikknoten für OpenGL verantwortlich ist, und einen Zeiger auf den Knoten des aktiven Teils des Timer-Randes deklariert.

Wenn Sie sich das Bild oben ansehen, werden Sie sehen, dass der gesamte Timer aus einem äußeren Rand besteht, in dem zwei Farben, der aktive Teil und der inaktive, sowie der innere Hintergrund dieses Randes vorhanden sind. Die Zeit zählt nicht, sie wird in einer QML-Datei über einen Timer gerendert. Berühren Sie sie also nicht. Der inaktive Teil der Felge ist für uns jedoch sehr wichtig, da das Plus dieser Rendermethode darin besteht, dass wir nur die Geometrie des Knotens ändern, der für den inaktiven Teil der Felge verantwortlich ist, während die beiden anderen Knoten der inaktive Teil sind und der innere Hintergrund wird nicht neu berechnet.

Und hier wird der Unterschied enorm sein. Ich warne Sie sofort, die Schwierigkeit und der Aufwand bei der Anzahl der Zeilen im Vergleich zur alten Methode sind sofort ersichtlich.

Aber bevor ich mich den Rendering-Methoden zuwende, werde ich eines bemerken. Im Klassenkonstruktor rufen Sie die folgende Methode auf. Dies bedeutet, dass unser QQuickItem Inhalt enthält, der gerendert werden muss, andernfalls wird die Rendermethode überhaupt nicht aufgerufen.

Wie Sie sehen können, gibt es hier nicht so viele Linien, und das Zeichnen durch das Kreisdiagramm und das Vorhandensein von Methoden zum Zeichnen von Ellipsen ermöglichen es Ihnen, sich nicht mit der Berechnung der Position von Punkten zu beschäftigen. Zum Festlegen von Farben müssen Sie keine zusätzlichen Objekte mit Speicherzuweisung im Heap erstellen. Der Renderprozess selbst ist wie folgt: Wir haben die updatePaintNode-Methode, die für jede Aktualisierungsanforderung die update-Methode verwendet, die das Redraw-Ereignis im Qt-Ereignisstapel aufruft.

Dabei wird ein Zeiger auf den Knoten zurückgegeben, der eine Reihe anderer Knoten enthält, die auch zum Rendern verwendet werden können. In unserem Fall ist dieser übergeordnete Knoten der Knoten des inaktiven Teils der Felge, und die anderen beiden sind der aktive Teil der Felge und der innere Hintergrund, für den der erste Knoten der übergeordnete Knoten ist. Bei der anfänglichen Initialisierung gibt es dort als Argument nullptr, daher ist es erforderlich, einen Knoten zu erstellen und andere Knoten darauf zu werfen.

Und mit weiteren Arbeiten können wir den Knoten einfach auf nullptr überprüfen und, falls vorhanden, statt zu initialisieren, einige Farb- oder Geometrieänderungen vornehmen. Das wird hier auch für einen Knoten eines aktiven Teils der Farbe. In diesem Fall geben wir beim Initialisieren den Zeiger auf den neu erstellten Knoten zurück, und beim Ändern geben wir den Zeiger auf den alten Knoten zurück. Aufmerksame und erfahrene Programmierer werden feststellen, dass ich nirgendwo im Rahmen des Qt-Rahmens einen Client einrichte. Der übergeordnete Client wird gelöscht, wenn Speicher für die zu erstellenden Knoten sowie für die Objekte für Geometrie und Materialien aus seinen untergeordneten Knoten entfernt wird .

Und auch nirgends im Detruktor der Klasse lösche ich die erstellten Objekte, ich bringe hier nicht einmal den Code des Destruktors. Tatsache ist, dass beim Entfernen von QQuickItem der Speicher für die Knoten gelöscht wird, da diese über Eigentumsrechte verfügen, wenn die Knoten mit der updatePaintNode-Methode zurückgegeben werden. Wenn bei der Installation neuer Objekte und Materialien der Knoten Eigentumsrechte an den alten Objekten besitzt, zerstört dieser Knoten auch die alten Objekte.

Also ist alles in Ordnung und Speicherlecks sollten nicht sein. Das Festlegen der Scheitelpunkte der Geometrie erfolgt über Methoden, die Zeiger auf Scheitelpunkte eines bestimmten Typs zurückgeben, und Indizes, die im Inneren auf Hohlräume verweisen. Wenn Sie einen Scheitelpunkt zurückgeben, wird eine Umwandlung in den gewünschten Datentyp vorgenommen.

Ich glaube, dass dies die Kosten für die Arbeit mit OpenGL sind. Ein wichtiger Punkt ist auch die Verwendung der markDirty-Methode. Diese Methode warnt alle Künstler, die mit dem Knoten arbeiten, dass eine bestimmte Änderung am Objekt aufgetreten ist und neu gezeichnet werden muss. Das Beispiel wird zwar ohne diese Methode funktionieren, aber ich gehe davon aus, dass in einer komplexeren Logik ohne diese Methode eine Reihe von Problemen auftreten können.

Nach Artikel gestellt 0 Frage s. Obwohl dieser Blog ein bisschen alt ist, versuche ich dies als einzige verfügbare Quelle, um mein auf Szenegraphen basierendes Gemälde zu zeichnen.

Ist das möglich, da es standardmäßig keine überzeugenden Klassen gibt. Tatsächlich ist diese Funktionalität nicht implementiert oder nicht dokumentiert. Ich bin mir nicht sicher. Weil wir Text in QML schreiben können. Ich denke, Sie sollten Quellen dieses Typs sehen. Und ich habe diesen Code auf GitHub gefunden. QML - Lektion 004. Abschnitt auswählen. Registrieren - Passwort vergessen? QML - Tutorial 032. Empfohlene Artikel zu diesem Thema QML - Lektion 024. Abschnitt Abonnement 53.

Geld PayPal. Indrajit Tapadar 11. März 2019, 1: Hallo, obwohl dieser Blog etwas alt ist, versuche ich dies als einzige verfügbare Quelle, um mein auf Szenegraphen basierendes Gemälde zu zeichnen.

Wie würden Sie empfehlen. Grüße, Indrajit. Ich denke, Sie können Code von GitHub in Ihr Projekt implementieren. Nur autorisierte Benutzer können Kommentare posten.

Bitte melden Sie sich an oder melden Sie sich an. Zuletzt bestandene Tests Bewertung. 25. Juni 2019, 2: Die ersten Programm- und Datentypen Ergebnis: 25. Juni 2019, 9: Zeiger, Arrays und Schleifen Ergebnis: 24. Juni 2019, 5: Letzte Kommentare. 24. Juni 2019, 10: 24. Juni 2019, 9: 21. Juni 2019, 8: Jetzt im Forum diskutieren.

25. Juni 2019, 4: 25. Juni 2019, 1: 25. Juni 2019, 10: 25. Juni 2019, 7: Auf der Suche nach einem Job? Für registrierte Benutzer auf der Website gibt es eine Mindestmenge an Werbung. Registrieren Sie sich auf der Website. Zurück nach oben. Dienstleistungen Für Werbetreibende.

(с) 2019 forcechemtech.com