QT5-Schriftwiedergabe auf verschiedenen Plattformen unterschiedlich

Ich möchte reproduzierbare Tests für einige benutzerdefinierte Widgets-Renderings durchführen. Dazu male ich sie auf ein QImage und speichere das Ergebnis als PNG. Die Ausgabe unterscheidet sich unter Windows erheblich von der unter MacOSX.

Ich kümmerte mich um:

Auswahl der gleichen Schriftart auf allen Plattformen (ich stelle die "TTF" -Schriftdatei zur Verfügung und zeige den Code darauf)Auf ein QImage und nicht auf eine QPixmap zeichnen, da in der Dokumentation angegeben ist, dass QImage Painter plattformunabhängig sein sollIch habe auch Antialisating- und TextAntialiasing-Hinweise ausgewähltAnfragen der Schriftart über QFontDatabase :: font (), sodass pointSize angegeben wird und nicht pixelSize

Wie kann ich sicherstellen, dass das Rendering auf allen Plattformen genau gleich ist, damit meine Testläufe reproduzierbar sind? Mit anderen Worten, ist es vielleicht möglich, QT5 zu zwingen, auf allen Plattformen dieselbe Schriftart-Engine zu verwenden (zum Beispiel Freetype)?

**

Ich habe das Problem mit einem einfachen Rendering-Testprogramm behoben. Der Code sieht also so aus:

QFontDatabase fontDb;
fontDb.addApplicationFont(".../fonts/Vera.ttf");

QImage   result(width, height, QImage::Format_RGB32);
QPainter painter(&result);
painter.setRenderHint(QPainter::Antialiasing);
painter.setRenderHint(QPainter::TextAntialiasing);


QBrush background(QColor(205, 205, 205));
painter.fillRect(0, 0, 800, 600, background);

QFont font = fontDb.font("Bitstream Vera Sans", "Normal", 10);
painter.setFont(font);

painter.setPen(QColor(0, 0, 0));
painter.drawText(10, 10, "ABCD abcd 01234567");

Die Bitstream Vera-Schriftart kann beispielsweise auf fontsquirel.com heruntergeladen werden.

Siehe das Ergebnis unter MacOSX (links) und unter Win32 (rechts), die sehr unterschiedlich sind:

Folgende Antwort und Kommentare von N1ghtLight unten und nachdem ich die von ihm vorgeschlagenen Links gelesen hatte, änderte ich den Code, um die Schriftart zu erhalten:

QFont font = fontDb_->font(("Bitstream Vera Sans", "Normal", -1);

qreal screenDPI  = QApplication::primaryScreen()->physicalDotsPerInch();
qreal RENDER_DPI = 72;

int pixelSize = (int)((qreal)10 * screenDPI / RENDER_DPI);
font.setPixelSize(pixelSize);

Dies scheint vor allem das Problem der sehr unterschiedlich großen Schrift zu lösen. Zumindest unter MacOSX ist die Schrift jetzt genau 10 Pixel hoch. Unter Windows wird die Schrift jedoch viel dünner und etwas kleiner. Ich bin immer noch verloren und verwirrt ...

Hier ist das neue Ergebnis (links MacOSX, rechts Windows). Die weiße Skala gibt die tatsächliche Größe von 10 Pixel an.

Folgende Antwort von G_G unten Ich habe den Code angepasst (was ist mit Linux? Mobile Plattformen? Das wird sehr kompliziert ...). Jetzt sind die Schriftarten in der Ausgabe unter Windows und MacOSX 10 Pixel groß, die Darstellung bleibt jedoch sehr unterschiedlich (MacOSX weiterhin links, Windows weiterhin rechts).

Vielen Dank

Antworten auf die Frage(3)

Ihre Antwort auf die Frage