Forum: PC Hard- und Software Qt5: Schlechtes Font-Rendering unter Ubuntu


von TriHexagon (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

seit Qt5 sieht die Schrift bei Qt Programmen unter meinen Ubuntu 
Systemen (derzeit Xubuntu 14.04) schrecklich verschwommen aus (siehe 
Bild). Gerade beim QtCreator (Version 3.0, Qt 5.2) stört mich das. Als 
noch Qt4 genutzt wurde sah die Schrift fantastisch aus (wie GTK 
Anwendungen), weshalb ich QtCreator bevorzugt unter Ubuntu genutzt habe. 
Natürlich habe ich mich im Internet darüber informiert und festgestellt, 
dass ich kein Einzelfall bin. Es scheinen sich aber nur sehr wenige 
darüber zu beschweren. Der Grund scheint zu sein, dass Qt5 die 
Einstellungen selbst aus der Umgebung ermittelt, möglicherweise geht 
dort etwas schief und Qt nutzt nicht die GTK Einstellungen sondern 
allgemeine generische Einstellungen. Den Parameter "-style gtk" habe ich 
auch schon versucht, es ändert sich aber nichts.

Was jemand etwas näheres darüber oder sogar eine Lösung? Das Downgrade 
auf eine ältere Qt/QtCreator Version kann jawohl keine Lösung sein.

von Georg A. (georga)


Lesenswert?

>  schrecklich verschwommen aus (siehe Bild).

Hm, ich sehe da nur ganz normales Antialiasing.

von TriHexagon (Gast)


Angehängte Dateien:

Lesenswert?

Zum Vergleich ein Bild aus Code::Blocks. Ich verstehe leider nichts von 
Font-Rendering, was genau ist da anders?

von Ernst (Gast)


Lesenswert?

Der Commit hier könnte/sollte das evtl fixen:

https://qt.gitorious.org/qt/qtbase/commit/2ad331465c3b19d56edb9b744b66e908f03294d3

Zumindest kannst du dann das Antialiasing über die normale 
fontconfig-geschichten abschalten.

von Yalu X. (yalu) (Moderator)


Lesenswert?

TriHexagon schrieb:
> Zum Vergleich ein Bild aus Code::Blocks. Ich verstehe leider nichts von
> Font-Rendering, was genau ist da anders?

Das Beispiel aus Code::Blocks verwendet Subpixel-Antialiasing, das
Beispiel aus dem QtCreator "gewöhnliches" Antialiasing. Das
Subpixel-Antialiasing nutzt die Tatsache, dass die Einzelpixel für die
drei Grundfarben jeweils nur ein Drittel der Breite eines vollen Pixels
belegen, womit für das Antialiasing effektiv die dreifache horizontale
Auflösung zur Verfügung steht. Dadurch erscheinen die Zeichen etwas
schärfer, sind aber dafür von leichten Farbsäumen umgeben.

Wie du das in Ubuntu bzw. Qt5 umstellen kannst, weiß ich auch nicht,
möglicherweise brauchst du tatsächlich den von Ernst genannten Patch.
Wenn ich das richtig sehe, entscheidet dieser allerdings nur darüber, ob
Antialiasing aktiviert wird oder nicht, nicht aber, welcher Typ von
Antialiasing angewandt wird.

Für meine Augen sieht aber auch das Subpixel-Antialiasing in deinem
zweiten Screenshot noch nicht zufriedenstellend aus. Dessen leichter
Gewinn an Schärfe wird durch die Farbsäume wieder zunichte gemacht.
Deswegen habe ich in fontconfig das lcdfilter-legacy aktiviert, das
dafür sorgt, dass nur schräge und gebogene, nicht aber vertikale Linien
geantialiast werden. Dadurch können die einzelnen Zeichen zwar etwas zu
breit oder zu schmal erscheinen, wirken aber deutlich schärfer als mit
dem lcdfilter-default, da das Antialiasing nur dort angewandt wird, wo
es "Treppenstufen" zu kaschieren gilt.

Leider funktioniert das Legacy-Filter nur für solche Fonts, die diese
intelligente Form des Antialiasing mit entsprechenden Hints unterstützen
(die DejaVu-Familie gehört bspw. dazu). Alle anderen Fonts werden
schlechter dargestellt als mit dem Default-Filter. Wird Subpixel-
Antialiasing aktiviert, sind die Farbsäume viel zu stark ausgeprägt,
fast noch stärker als man es von Windows gewohnt ist.

Da ich überall, wo es möglich ist (Konsolenfenster, Editor, Web-Browser
usw.) sowieso DejaVu als Standardschrift eingestellt habe, passt für
mich das Legacy-Filter besser. In den seltenen Fällen, wo ich ich für
irgendwelche Dinge "nichtkompatible" Schriften verwende, bekomme ich
dann eben Augenkrebs, aber der verheilt schnell wieder, nachdem ich
wieder zu normalen Schriften zurückgekehrt bin.

Mein nächster Bildschirm wird ein hochauflösender sein. Hoffentlich
sieht man dann vom Antialiasing gar nichts mehr. Vielleicht kann man es
sogar komplett deaktivieren, ohne dass die Zeichen allzu pixelig werden.

von TriHexagon (Gast)


Lesenswert?

Vielen Dank an euch. Die erweiterte Erläuterung hat mir auch sehr 
gefallen, das lcdfilter-legacy fontconfig werde ich mir mal ansehen.

Noch eine Frage zu dem Patch, muss ich den selbst einpflegen, d.h. die 
Zeilen einfügen und qtbase selbst kompilieren? Oder gibt es eine 
komfortablere Lösung?

von Yalu X. (yalu) (Moderator)


Lesenswert?

Hier sind ein paar Beispiele dafür, wie unterscheidliche Fonts in
unterscheidlichen Größen mit unterscheidlichen Filteroptionen aussehen.
Dazu kommen dann noch die unterscheidlichen Geschmäcker der Betrachter.

  http://spasche.net/files/lcdfiltering/

Man sieht sofort, dass es leider keine Einstellung gibt, die in allen
Situationen gleichgute Ergebnisse bringt.

Da ich die folgende Frage nicht beantworten kann, stelle ich sie noch
einmal hinten an, damit sie nicht untergeht:

TriHexagon schrieb:
> Noch eine Frage zu dem Patch, muss ich den selbst einpflegen, d.h. die
> Zeilen einfügen und qtbase selbst kompilieren? Oder gibt es eine
> komfortablere Lösung?

von TriHexagon (Gast)


Angehängte Dateien:

Lesenswert?

Ich konnte das Problem lösen! Dank Yalus Erläuterung wusste ich nun nach 
was ich suchen musste.

Ich fand diesen Thread: 
https://bbs.archlinux.org/viewtopic.php?id=172361

Qt5 scheint die DE-Einstellungen zu ignorieren, wenn es eine local.conf 
in /etc/fonts gibt. Mit dieser lässt sich das Font-Rendering genau 
einstellen. Nun habe ich einfach das Sub-Pixel Rendering und den 
LCD-Filter eingeschaltet und es passt!

Hier ist meine local.conf
1
<?xml version='1.0'?>
2
<!DOCTYPE fontconfig SYSTEM 'fonts.dtd'>
3
<fontconfig>
4
 
5
 <!-- Hinting -->
6
 <match target="font">
7
  <edit mode="assign" name="hinting">
8
   <bool>true</bool>
9
  </edit>
10
 </match> 
11
 
12
 <!-- Hint Style -->
13
 <match target="font">
14
  <edit mode="assign" name="hintstyle">
15
   <const>hintslight</const>
16
  </edit>
17
 </match>
18
19
 <!-- Anti-aliasing -->
20
 <match target="font">
21
  <edit mode="assign" name="antialias">
22
   <bool>true</bool>
23
  </edit>
24
 </match>
25
26
<!-- Sub-Pixel -->
27
 <match target="font">
28
   <edit name="rgba" mode="assign">
29
     <const>rgb</const>
30
   </edit>
31
 </match>
32
33
<!-- LCD-Filter -->
34
 <match target="font">
35
   <edit mode="assign" name="lcdfilter">
36
     <const>lcddefault</const>
37
   </edit>
38
 </match>
39
40
</fontconfig>

Hier noch eine gute Seite, die das Einstellen erklärt: 
https://wiki.archlinux.org/index.php/Font_configuration

Der Filter lcdlegacy hab ich mal ausprobiert, habe auf die schnelle aber 
keinen Unterschied an diesem Bildschirm entdeckt.

Vielen Dank nochmal!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.