QFontInfo::pixelSize() изменяется между Qt 4 и Qt 5

Этот код:

QFont convertPointToPixelSize( const QFont& f )
{
    QFont ret( f );
    QFontInfo fi( ret );
    ret.setPixelSize( fi.pixelSize() );
    return ret;
}
qDebug() << "getFont()=" << getFont();
qDebug() << "convertPointToPixelSize( getFont() )=" << convertPointToPixelSize( getFont());

Возвращает это на Qt 4.8.5:

getFont()= QFont( "MS Shell Dlg 2,36,-1,5,50,0,0,0,0,0" ) 
convertPointToPixelSize( getFont() )= QFont( "MS Shell Dlg 2,-1,48,5,50,0,0,0,0,0" ) 
getFont()= QFont( "Arial,28,-1,5,50,0,0,0,0,0" ) 
convertPointToPixelSize( getFont() )= QFont( "Arial,-1,37,5,50,0,0,0,0,0" ) 
getFont()= QFont( "Times New Roman,72,-1,5,50,0,0,0,0,0" ) 
convertPointToPixelSize( getFont() )= QFont( "Times New Roman,-1,96,5,50,0,0,0,0,0" )

И это на Qt 5.11.1:

getFont()= QFont( "MS Shell Dlg 2,36,-1,5,50,0,0,0,0,0" )
convertPointToPixelSize( getFont() )= QFont( "MS Shell Dlg 2,-1,72,5,50,0,0,0,0,0" )
getFont()= QFont( "Arial,28,-1,5,50,0,0,0,0,0" )
convertPointToPixelSize( getFont() )= QFont( "Arial,-1,56,5,50,0,0,0,0,0" )
getFont()= QFont( "Times New Roman,72,-1,5,50,0,0,0,0,0" )
convertPointToPixelSize( getFont() )= QFont( "Times New Roman,-1,144,5,50,0,0,0,0,0" )

Обратите внимание на различные значения QFontInfo::pixelSize(), возвращаемые для одних и тех же шрифтов. Таким образом, QFontInfo::pixelSize(), похоже, изменился между Qt 4 и Qt 5 (возвращает большие значения для Qt 5). Что я могу сделать, чтобы получить значения QFontInfo::pixelSize() для Qt 4 в Qt 5? Я посмотрел на QFontMetrics, но ничего полезного не увидел.

1 ответ

QFont является запросом шрифта, он не указывает на фактический выбранный шрифт. QFontInfo обеспечивает это. Все, что вы показали, это то, что Qt 5 и Qt 4 используют разные значения DPI в вашей системе, и этого следовало ожидать. Точки являются физической единицей, а пиксели - логической единицей. DPI связывает два. Если вам нужны одинаковые размеры пикселей, почему вы не выбрали желаемый размер пикселя в запросе шрифта (QFont), а не размер точки?

Другие вопросы по тегам