Я хочу сделать репродуктивные тесты некоторых пользовательских визуализаций виджетов. Для этого я рисую их на QImage и сохраняю результат как PNG. На Windows это действительно отличается от MacOSX.
Я позаботился о:
- Выбор одного и того же шрифта на всей платформе (я предоставляю файл шрифта "TTF" и указываю ему код)
- Опираясь на QImage, а не на QPixmap, поскольку в документации говорится, что художник QImage должен быть независимым от платформы.
- Я также выбрал подсказки Antialisating и TextAntialiasing
- Запрос шрифта через QFontDatabase:: font(), чтобы указать pointSize, а не pixelSize
Как я могу убедиться, что рендеринг точно такой же на всех платформах, чтобы мои тестовые прогоны были воспроизводимыми? Другими словами, возможно ли заставить QT5 использовать один и тот же механизм шрифтов на всех платформах (например, freetype)?
**
Я прикрепил проблему к простой программе тестирования рендеринга. Таким образом, код выглядит следующим образом:
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");
Шрифт Bitstream Vera можно загрузить, например, на fontsquirel.com.
Посмотрите результат на MacOSX (слева) и на Win32 (справа), которые сильно отличаются:
После ответа и комментариев от N1ghtLight ниже, и после прочтения ссылок, которые он предложил, я изменил код, чтобы получить шрифт:
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);
Это, по-видимому, в основном решает проблему шрифта самого разного размера. По крайней мере, на MacOSX, шрифт ровно на 10 пикселей. В Windows, хотя шрифт становится намного тоньше и немного меньше. Я все еще потерян и смущен...
Вот новый результат (слева MacOSX, справа Windows). Белая шкала показывает истинный размер 10 пикселей.
После ответа G_G ниже я адаптировал код (как насчет Linux? Мобильные платформы? Это очень сложно...). Теперь шрифты составляют 10 пикселей на выходе как на Windows, так и на MacOSX, но различие все еще отличается (все еще MacOSX слева, Windows справа).
Спасибо.