qt 字体不随dpi_Windows – QT5字体渲染在各种平台上不同
我想對某些自定義小部件渲染進行可重復的測試.為了做到這一點,我將它們繪制成一個Q
Image,并將結果保存為PNG.與MacOSX相比,Windows的輸出真的不同.
我照顧:
>在所有平臺上選擇相同的字體(我提供“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,800,600,background);
QFont font = fontDb.font("Bitstream Vera Sans","Normal",10);
painter.setFont(font);
painter.setPen(QColor(0,0));
painter.drawText(10,10,"ABCD abcd 01234567");
Bitstream Vera字體可以在fontsquirel.com上下載.
看到MacOSX(左)和Win32(右)的結果,這是非常不同的:
在下面的N1ghtLight的回答和評論之后,在閱讀他建議的鏈接之后,我更改了代碼以獲得字體:
QFont font = fontDb_->font(("Bitstream Vera Sans",-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?移動平臺呢?這很復雜…).現在,Windows和MacOSX的輸出中的字體都是10個像素,仍然很不一樣(左邊是MacOSX,右邊是Windows).
謝謝.
總結
以上是生活随笔為你收集整理的qt 字体不随dpi_Windows – QT5字体渲染在各种平台上不同的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 治疗不孕不育那个医院比较好
- 下一篇: 2022世预赛积分相同比什么