QT: Wie hochwertig ist die 2D-Grafik Qualität (mit Antialiasing) unter Windows?



  • Hallo!

    Nach langen Jahren der MFC Windows 2D-Grafik Programmierung mit GDI+ überlege ich auf QT umzusteigen. Mit der 2D Antialiasing Qualität von GDI+ war ich immer ich sehr zufrieden.

    Nun frage ich mich:

    1. Wie hochwertig ist die QT 2D-Grafik mit Antialiasing generell im Vergleich zu GDI+?
    2. Wie gut unterstützt QT 2D-Grafik Antialiasing (Linien, Kurven, Kreise, Fonts etc.)?
    3. Wie komfortable ist die 2D-Grafik Programmierung mit Antialiasing unter QT?

    Danke und Grüße,
    Bernd



  • Probiers aus?
    Keine Ahnung, mir ist bisher nichts negatives aufgefallen. Antialiasing ist ja jetzt nicht wirklich kompliziert, glaub nicht, dass man da so viel falsch machen kann.

    mireiner schrieb:

    3. Wie komfortable ist die 2D-Grafik Programmierung mit Antialiasing unter QT?

    Was soll daran "komfortabel" sein und was stellst du dir unter Antialiasing Programmierung vor? Du setzt halt im Endeffekt ein Flag, mehr nicht.



  • Was stellst du dir unter Antialiasing Programmierung vor
    Überhaupt erst einmal das Antialiasing funktioniert. Als ich mit der Grafikprogrammierung vor Jahren begann, musste ich feststellen, dass die "normale" MFC GDI Grafikbibliothek überhaupt kein Antialiasing unterstützt. Kaum zu glauben, aber war. Erst später fand ich heraus, dass es eine gesonderte Grafikbibliothek GDI+ für diesen Zweck gibt, die aber etwas umständlich eingebunden werden muss.

    Was soll daran "komfortabel" sein?
    Naja, ich habe auch einmal in die DirectX Programmierung kurz reingeschnuppert. Da kam mir das nackte Grausen - viel zu kompliziert für meinen Geschmack und mit vielen Dingen, die ich als 2D-Grafik Programmierer überhaupt nicht brauche. Wenn QT sich in etwa so komfortabel Programmieren läßt, wie die MFC GDI oder GDI+ wäre ich schon zufrieden.



  • Ja, das unterstützt Antialiasing.
    Im Qt Umfeld ist die Qt Grafikprogrammierung (also, Grafikprogrammierung insgesamt, nicht nur Antialiasing) sehr bequem. Aber dazu musstest dich zuerst mit Qt und natürlich mit C++ auskennen (nein, nicht MFC).



  • Im Qt Umfeld ist die Qt Grafikprogrammierung sehr bequem
    Das ist gut zu hören!

    Aber dazu musstest dich zuerst mit Qt und natürlich mit C++ auskennen.
    C++ ist kein Problem. In QT müsste ich mich natürlich einarbeiten.

    Es werden zwei QT Download Pakete für Windows angeboten. Die eine beruht auf OpenGL, die andere (wohl die Standard Variante, weil sie nicht näher bezeichnet ist) basiert auf "ANGLE". So wie ich es verstanden habe, ist wohl die auf ANGLE basierende standard Variante zu empfehlen, oder?



  • mireiner schrieb:

    Im Qt Umfeld ist die Qt Grafikprogrammierung sehr bequem
    Das ist gut zu hören!

    Aber dazu musstest dich zuerst mit Qt und natürlich mit C++ auskennen.
    C++ ist kein Problem. In QT müsste ich mich natürlich einarbeiten.

    Es werden zwei QT Download Pakete für Windows angeboten. Die eine beruht auf OpenGL, die andere (wohl die Standard Variante, weil sie nicht näher bezeichnet ist) basiert auf "ANGLE". So wie ich es verstanden habe, ist wohl die auf ANGLE basierende standard Variante zu empfehlen, oder?

    Die Unterscheidung ob OpenGL oder ANGLE betrifft Hauptsächlich den QtQuick 2 Scenengraphen.
    Dieser verwendet intern die OpenGL API fürs Rendering. ANGLE ist eine OpenGL API Implementierung, welche unter Windows Direct3D verwendet.

    Da du momentan nur 2D Rendering haben möchtest, reicht es vermutlich, wenn du die Klassen im QtWidget modul verwendest. Und dort spielt die wahl ob OpenGL oder ANGEL für reines 2D Zeichnen keine rolle.



  • firefly schrieb:

    Die Unterscheidung ob OpenGL oder ANGLE betrifft Hauptsächlich den QtQuick 2 Scenengraphen. Dieser verwendet intern die OpenGL API fürs Rendering. ANGLE ist eine OpenGL API Implementierung, welche unter Windows Direct3D verwendet.

    Keine Ahnung was nun "Scenengraphen" sind. Aber von QTQuick habe ich schon gehört. Das ist QT Programmierung in der Kurzform QML, die ich vermutlich nicht verwenden werde. Ich nehme mal an, daß Deine Aussage dann auch für das aktuelle QTQuick 5 gelten wird? Wo liegt eigentlich das Einsatzgebiet von QTQuick? Werden damit nur kleinere Projekte realisiert? Ist QTQuick in der Ausführung langsamer als QtWidget? Wenn ich mir anschaue, wie einfach die QTQuick Programmierung ist, hätte ich mir vor 20 Jahren so etwas gewünscht, als ich unter großen Mühen begann Windows Applicationen mit der MFC zu schreiben. http://www.youtube.com/watch?v=_6_F6Kpjd-Q

    firefly schrieb:

    Da du momentan nur 2D Rendering haben möchtest, reicht es vermutlich, wenn du die Klassen im QtWidget modul verwendest. Und dort spielt die wahl ob OpenGL oder ANGEL für reines 2D Zeichnen keine rolle.

    Dann werde ich es wohl anscheinend ausschließlich mit der Klasse QtWidget zu tun haben. Gut zu wissen, das ich mir dann um OpenGL und ANGLE keine Gedanken machen muss. Da ich für eine breite Anwenderklientel entwickeln möchte, scheint mir OpenGL, das bestimmte Treiber und Hardwareunterstützung benötigt, nicht geeignet. Danke für diese Klarstellung!


  • Mod

    Den Vergleich mit GDI+ musst du wohl selber machen.

    Für 2D Grafik hast du 3 Möglichkeiten:
    GraphicsView - ist für 2D ausgelegt, mit C++ Backend
    QML - Alternative, aber afaik noch nicht so gut wie graphicsview.
    QPainter - Qt hat ein OpenGL basiertes Drawing Backend, was evtl. hier auch benutzt werden könnte. (GraphicsView nutzt es, muss aber evtl. als Flag gesetzt werden)



  • Worin besteht denn der Unterschied zwischen QWidget und QGraphicsView?


  • Mod

    mireiner schrieb:

    Worin besteht denn der Unterschied zwischen QWidget und QGraphicsView?

    QGraphicsView ist ein Widget für 2D Zeichnen.
    Schau einfach mal in die Beispiele: http://qt-project.org/doc/qt-5.1/qtwidgets/examples-graphicsview.html



  • Nachdem ich jetzt QT installiert und ein wenig ausprobiert habe, frage ich mich warum ich so viele Jahre lang bei der MFC geblieben bin. Mein erster oberflächlicher Eindruck ist, dass in QT alles wenig einfacher aussieht. Der Umstieg wird sicher wieder einigen Lernaufwand kosten. Aber schon jetzt beschleicht mich die Vermutung, dass ich den Wechsel auf QT nicht bereuen werde. Den einzigen Vorteil der MFC sehe ich für meinen Anwendungsbereich nur noch in den vielen verfügbaren Beispielcodes im Internet, beispielsweise auf Codeproject etc... Aber das mag sich mit den Jahren auch ändern.

    Vielen Dank für die Antworten!



  • mireiner schrieb:

    Den einzigen Vorteil der MFC sehe ich für meinen Anwendungsbereich nur noch in den vielen verfügbaren Beispielcodes im Internet, beispielsweise auf Codeproject etc... Aber das mag sich mit den Jahren auch ändern.

    Den Eindruck hatte ich nicht mal. Jetzt mal davon abgesehen, dass ich MFC schon vor 15 Jahren für völlig veraltet und hässlich gehalten habe (und seitdem hat sich nichts geändert). Für Qt findet man auch sehr viele Beispiele, Qt wird in großen OpenSource Projekten verwenden, sodass man erst recht Beispiele findet, und Qt ist selbst Open Source, sodass man sich genau anschauen kann, wie das funktioniert und evtl. anpassen.



  • Mechanics schrieb:

    Für Qt findet man auch sehr viele Beispiele

    Kannst Du bitte genau beschreiben, wie und wo Beispiele zu finden sind (abgesehen von den Beispielen, die mit der QT Installation geliefert werden)?

    Mechanics schrieb:

    Qt wird in großen OpenSource Projekten verwenden, sodass man erst recht Beispiele findet.

    Wie und wo läßt sich am besten nach diesen Opensource Programmen suchen? Meinst Du beispielsweise Sourceforge.net? Aber wie suche ich dort nach Programmen, die mit QT programmiert wurden? Habe nur eine Suche nach Programmiersprachen gefunden. Gibt es noch andere Quellen dieser Art?



  • Beispiele finde ich meist über Google. Mir gings jetzt nicht um Anfängerbeispiele, um reinzukommen, sondern um konkrete Problemlösungen. Und da findet man über Google dann meist sehr schnell was. Ich hatte praktisch noch nie ein Problem (und wir benutzen Qt sehr intensiv in der Arbeit), bei dem ich überhaupt nicht weitergekommen wäre. Ziemlich viele Antworten findet man übrigens auf stackoverflow.
    Mit den Open Source Projekten ist es genauso. Wenn ich nach sehr konkreten Begriffen suche (z.B. interne Klassen) lande ich oft schon im Code von irgendwelchen Open Source Projekten, z.B. KDE, Scribus usw. Da kann man sich dann natürlich auch einiges abschauen. Wenn man etwas neues braucht, was noch nicht im Standard abgedeckt ist, ist die Wahrscheinlichkeit das in einer der Open Source Projekte zu finden gar nicht so schlecht.



  • mireiner schrieb:

    scheint mir OpenGL, das bestimmte Treiber und Hardwareunterstützung benötigt, nicht geeignet. Danke für diese Klarstellung!

    Sorry, aber das ist nicht wahr. OpenGL wird von allen gängigen Grafikkarten einwandfrei unterstützt. Die Treiber für OpenGL sind in den Grafikkarten Treibern enthalten. Da muss nix extra mitgeliefert werden oder sonst was.

    Es ist eigentlich auch das genaue Gegenteil der Fall. OpenGL wird auf mehr Systemen unterstützt, als DirectX.



  • Scorcher24 schrieb:

    Sorry, aber das ist nicht wahr. OpenGL wird von allen gängigen Grafikkarten einwandfrei unterstützt. Die Treiber für OpenGL sind in den Grafikkarten Treibern enthalten. Da muss nix extra mitgeliefert werden oder sonst was.

    Es ist eigentlich auch das genaue Gegenteil der Fall. OpenGL wird auf mehr Systemen unterstützt, als DirectX.

    Auf der QT Seite http://qt-project.org/wiki/Qt-5-on-Windows-ANGLE-and-OpenGL werden die Vor-und Nachteile von ANGLE und OpenGL verglichen. Dort las ich, dass OpenGL in der Version 1 zu limitiert für QT ist und spätere OpenGL Versionen zusätzliche Treiber Installationen erfordern.

    "OpenGL on Windows:
    Although Microsoft Windows has native support for OpenGL since quite some time, the supported standard version (version 1 without any drivers installed) is too limited for Qt . Newer versions are generally available through custom graphics drivers, but require users to install them. Also, the quality of the OpenGL support by some drivers is lacking."

    Keine Ahnung, ob die Angaben dort so stimmen. Im QT Beispiel "40000 Chips" (in der QT Installation enthalten), dass einen Vergleich mit und ohne OpenGL und Antialiasing ermöglicht (bei mir übrigens ohne Installation zusätzlicher Treiber lauffähig) zeigt auf meinem System mit OpenGL eine etwas bessere Anzeigequalität von Fonts, besonders wenn die Fonts rotiert werden.

    Die höchste 2D-Grafikqualität ist für mein Projekt sehr wichtig. Auch wenn das leichte Geschwindigkeitseinbußen mit sich bringen würde. Trotzdem sollte das Programm auf jedem System laufen, ohne das zusätzliche Treiberinstallation nötig wäre oder bestimmte Hardwareanforderungen Voraussetzung sind.



  • Mechanics schrieb:

    Beispiele finde ich meist über Google ... Wenn ich nach sehr konkreten Begriffen suche (z.B. interne Klassen) lande ich oft schon im Code von irgendwelchen Open Source Projekten.

    Danke für den Hinweis. Auf die naheliegende Idee, einfach nach konkreten QT Klassen zu Googlen war ich zuerst nicht gekommen.



  • Wie ich bereits schrieb, diese "zusätzlichen" Treiber sind einfach die Grafikkarten Treiber, die es für alle Systeme in mittlerweile hoher Qualität gibt (Steam sei Dank), auch Linux. Diese Treiber installieren die OpenGL32.dll aus der alle Funktionen dynamisch geladen werden müssen. Und wer hat die denn nicht installiert? OpenGL und DirectX Support ist heute auf jedem System vorhanden, sogar wenn man nur eine APU hat.



  • Die OpenGL+DirectX-Treiber sind doch sogar auf jedem popligen Büro-PC installiert. Da fragt man sich, was die Diskussion überhaupt soll? 😕



  • Artchi schrieb:

    Die OpenGL+DirectX-Treiber sind doch sogar auf jedem popligen Büro-PC installiert. Da fragt man sich, was die Diskussion überhaupt soll? 😕

    Wir hatten leider schon häufiger Probleme mit OpenGl bei Kunden. Meist hat es gereicht, den Treiber zu aktualisieren. Ab und zu mussten wir bei irgendwelchen exotischen Grafikkarten den Treiber aber sogar downgraden.
    Problematisch ist das ganze vor allem, wenn es nicht darum geht, dass irgendwas nicht oder falsch dargestellt wird, sondern wenn OpenGl intern in einem komplexeren Workflow benutzt wird und der Kunden nur meint, es hat was nicht funktioniert. z.B. Generierung von CAD Modellen, wo OpenGl vielleicht nur für die Vorschaugenerierung verwendet wird, aber zu einem sporadischen Absturz führt, bei dem man die Ursache nicht ohne weiteres erkennt.


Anmelden zum Antworten