Standardmäßig verwendet Qt eine sehr einfache, schnelle und hässliche Art der Skalierung von Bildern, Qt::FastTransformation
, wahrscheinlich eine Interpolation des nächsten Nachbarn oder etwas sehr ähnliches.
Bei einem QPixmap
kann man eine visuell bessere Skalierung wählen, zum Beispiel
Was können wir jedoch tun, wenn sich das Bild nicht in einem QPixmap
-Objekt befindet, sondern einfach den Hintergrund einer Schaltfläche oder eines anderen Widgets?
Im Folgenden finden Sie eine sehr einfache Möglichkeit zum Erstellen einer automatisch skalierbaren, vollständig angepassten Schaltfläche, die sich für eine auflösungsunabhängige Anwendung eignet, wenn sie mit Layouts und setStretch()
verwendet wird.
Ich habe border-image
anstelle von background-image
wegen einem Mangel
Wie kann ich mit Bildern in Stylesheets glatter skalieren?
Die gleiche Sache mit Pixmaps zu implementieren, ist viel weniger elegant. Ich muss immer Resize-Ereignisse abfangen, die neuen Größen aller meiner Widgets neu berechnen und sie manuell neu streichen.
Bearbeiten:
Interessanterweise funktioniert die Glättungsskalierung mit Stylesheets, wenn das Bild vergrößert wird, aber nicht, wenn es verkleinert wird.
Im folgenden Beispiel wird in der ersten Zeile ein 32 * 32-Symbol und in der zweiten Zeile ein einheitliches Raster verwendet, das größer als 2000 * 2000 ist.
Intern verwendet Qt QPainter
zum Zeichnen der Stile und QPainter
verwendet bilineare Interpolation beim Zeichnen von skalierten Pixmaps. Dies hat einen großen Nachteil in Bezug auf die Qualität, wenn der Downscaling-Faktor klein genug ist, siehe diesen Fehlerbericht . Für beste Qualität sollte das Hintergrundquellbild immer innerhalb von [0,5, 2,0] Faktor der Zielgröße liegen. AFAICT gibt es keinen einfachen Weg aus dieser Beschränkung.